- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为我的应用程序创建密码和指纹授权。我知道如何做密码部分,但我的问题是如何创建指纹授权?
所以,我已经完成了 androidHive 的教程并编写了这段代码:
public class LogUpInActivity extends Activity {
// sign up statue
private SharedPreferences StatuSharePreference;
private SharedPreferences.Editor editor_state;
public boolean state_signUp, default_state, state_check;
private Stage mStage;
// sign up with password
private View signUpContent;
private EditText signUp_pasword_editText, signUp_conf_password_editText, signIn_password_editText;
public static SharedPreferences save_password_sharePreference;
public static SharedPreferences.Editor editor_password;
public static String logIn_password = null;
// sign in with password
public View signIn_passwordContent;
public int times_of_signIn = 5;
// sign in with finger print
private View signIn_fingerPrintContent;
private TextView msg_fingerPrint;
private KeyStore keyStore;
private Cipher cipher;
private static final String KEY_NAME = "mohrOmum";
// sign in after unlocking
public boolean sign_in_again;
private Button cancelBTN, stateBTN;
private TextView msg_state_conf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_container);
TextView who = (TextView) findViewById(R.id.who);
who.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/mehr.ttf"));
TextView signInPassTitle = (TextView) findViewById(R.id.password_description);
signInPassTitle.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/nazanin.ttf"));
TextView signUpPassTitle = (TextView) findViewById(R.id.signUp_title);
signUpPassTitle.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/nazanin.ttf"));
StatuSharePreference = getSharedPreferences("signUp", Context.MODE_PRIVATE);
editor_state = StatuSharePreference.edit();
signUpContent = findViewById(R.id.signup_content);
signUp_pasword_editText = (EditText) findViewById(R.id.pass);
signUp_conf_password_editText = (EditText) findViewById(R.id.conf_pass);
signIn_password_editText = (EditText) findViewById(R.id.password);
msg_state_conf = (TextView) findViewById(R.id.notConfiration_msg);
save_password_sharePreference = getSharedPreferences("password", Context.MODE_PRIVATE);
editor_password = save_password_sharePreference.edit();
signIn_passwordContent = findViewById(R.id.signIn_password_container);
signIn_fingerPrintContent = findViewById(R.id.fingerprint_container);
msg_fingerPrint = (TextView) findViewById(R.id.fingerprint_description);
// Initializing both Android Keyguard Manager and Fingerprint Manager
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
FingerprintManager fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
// check if sign up is done or not
if (!default_state) {
state_signUp = false;
default_state = true;
} else {
state_signUp = true;
}
state_check = StatuSharePreference.getBoolean("signUp", state_signUp);
if (!state_check) {
// register user password
signIn_passwordContent.setVisibility(View.GONE);
signUpContent.setVisibility(View.VISIBLE);
mStage = Stage.SIGNUP;
} else {
signUpContent.setVisibility(View.GONE);
signIn_passwordContent.setVisibility(View.VISIBLE);
// Check whether the device has a Fingerprint sensor.
if (!fingerprintManager.isHardwareDetected()) {
signIn_fingerPrintContent.setVisibility(View.GONE);
} else {
signIn_fingerPrintContent.setVisibility(View.VISIBLE);
// Checks whether fingerprint permission is set on manifest
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
msg_fingerPrint.setVisibility(View.VISIBLE);
msg_fingerPrint.setText(R.string.fingerPrint_not_avable);
msg_fingerPrint.setTextColor(getResources().getColor(R.color.red_color));
} else {
// Check whether at least one fingerprint is registered
if (!fingerprintManager.hasEnrolledFingerprints()) {
msg_fingerPrint.setVisibility(View.VISIBLE);
msg_fingerPrint.setText(R.string.fingerPrint_not_register);
msg_fingerPrint.setTextColor(getResources().getColor(R.color.red_color));
} else {
// Checks whether lock screen security is enabled or not
if (!keyguardManager.isKeyguardSecure()) {
msg_fingerPrint.setVisibility(View.VISIBLE);
msg_fingerPrint.setText(R.string.fingerPrint_not_register);
msg_fingerPrint.setTextColor(getResources().getColor(R.color.red_color));
} else {
generateKey();
if (cipherInit()) {
FingerprintManager.CryptoObject cryptoObject = new FingerprintManager.CryptoObject(cipher);
FingerprintHandler helper = new FingerprintHandler(this);
helper.startAuth(fingerprintManager, cryptoObject);
}
}
}
}
}
mStage = Stage.SIGNIN_PASSWORD;
}
cancelBTN = (Button) findViewById(R.id.cancel_button);
cancelBTN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
logIn_password = save_password_sharePreference.getString("password", logIn_password);
stateBTN = (Button) findViewById(R.id.second_dialog_button);
stateBTN.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View view) {
switch (mStage) {
case SIGNUP: //get user password and register it
registerPassword();
break;
/*case SIGNIN_FINGERPRINT:// open sign in with password
signInWithPassword();
break;*/
case SIGNIN_PASSWORD://checking passsword entry
verifyPassword();
break;
}
}
});
} // on create
/**
* get user password from Edit text , check its lengh , confirm it
**/
public void registerPassword() {
String passString = signUp_pasword_editText.getText().toString();
String confPassString = signUp_conf_password_editText.getText().toString();
if ((passString.equals(confPassString)) &&
(passString.length() == 12) &&
(confPassString.length() == 12)) {
logIn_password = passString;
editor_password.putString("password", logIn_password).commit();
Toast.makeText(this, logIn_password, Toast.LENGTH_LONG).show();
msg_state_conf.setVisibility(View.VISIBLE);
msg_state_conf.setText(R.string.msg_conf);
msg_state_conf.setTextColor(getResources().getColor(R.color.green_color));
editor_state.putBoolean("signUp", true).commit();
//state_signUp = true;
//mina! ***checking fingerPrint sensor***
/* + : finger primt authorization
** - : sign in with password
*/
mStage = Stage.SIGNIN_PASSWORD;
signUpContent.setVisibility(View.GONE);
signIn_passwordContent.setVisibility(View.VISIBLE);
} else {
msg_state_conf.setVisibility(View.VISIBLE);
msg_state_conf.setText(R.string.msg_not_conf);
msg_state_conf.setTextColor(getResources().getColor(R.color.red_color));
//not confirm
editor_state.putBoolean("signUp", false).commit();
}
}
/**
* Checks whether the current entered password is correct, and dismisses the the dialog and
* let's the activity know about the result.
*/
private void verifyPassword() {
logIn_password = save_password_sharePreference.getString("signUp", logIn_password);
Toast.makeText(this, logIn_password, Toast.LENGTH_LONG).show();
if (signIn_password_editText.getText().toString().equals(logIn_password)) {
startActivity(new Intent(LogUpInActivity.this, MainActivity.class));
LogUpInActivity.this.finish();
} else {
--times_of_signIn;
Toast.makeText(this, times_of_signIn + "تعداد ورود باقیمانده:", Toast.LENGTH_LONG).show();
signIn_password_editText.setText(null);
if (times_of_signIn == 0) {
Toast.makeText(this, R.string.restart_app, Toast.LENGTH_LONG).show();
MainActivity.sqlDB.delete(DataBaseClass.BANK_TABLE_NAME, null, null);
logIn_password = null;
editor_password.putString("password", logIn_password).commit();
state_signUp = false;
editor_state.putBoolean("signUp", state_signUp).commit();
signIn_passwordContent.setVisibility(View.GONE);
signUpContent.setVisibility(View.VISIBLE);
mStage = Stage.SIGNUP;
}
}
}
/*
sign in with finger print
*/
@TargetApi(Build.VERSION_CODES.M)
protected void generateKey() {
try {
keyStore = KeyStore.getInstance("AndroidKeyStore");
} catch (Exception e) {
e.printStackTrace();
}
KeyGenerator keyGenerator;
try {
keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
//startActivity(new Intent(LogUpInActivity.this,MainActivity.class));
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
throw new RuntimeException("Failed to get KeyGenerator instance", e);
}
try {
keyStore.load(null);
keyGenerator.init(new
KeyGenParameterSpec.Builder(KEY_NAME,
KeyProperties.PURPOSE_ENCRYPT |
KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setUserAuthenticationRequired(true)
.setEncryptionPaddings(
KeyProperties.ENCRYPTION_PADDING_PKCS7)
.build());
keyGenerator.generateKey();
} catch (NoSuchAlgorithmException |
InvalidAlgorithmParameterException
| IOException e) {
throw new RuntimeException(e);
} catch (java.security.cert.CertificateException e) {
e.printStackTrace();
}
}
@TargetApi(Build.VERSION_CODES.M)
public boolean cipherInit() {
try {
cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7);
} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
throw new RuntimeException("Failed to get Cipher", e);
}
try {
keyStore.load(null);
SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME, null);
cipher.init(Cipher.ENCRYPT_MODE, key);
return true;
} catch (IOException e) {
e.printStackTrace();
} catch (java.security.cert.CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return true;
}
public void onFinish(){
editor_password.putString("password",logIn_password).commit();
}
/**
* Enumeration to indicate which authentication method the user is trying to authenticate with.
*/
public enum Stage {
SIGNUP,
SIGNIN_FINGERPRINT,
SIGNIN_PASSWORD
}
现在我有以下问题:
verifyPassword()
方法)请指导。
最佳答案
在FingerPrintHamdler
类中,您可以找到onAuthenticationSucceeded()
方法。所以写这段代码:
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
this.update("Fingerprint Authentication succeeded.", true);
Intent intent=new Intent(context.getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
}
关于android - 如何在android中创建指纹授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44241710/
BizTalk 将内部 SFTP 测试的指纹视为ssh-rsa 2048 33:88:f0:ff:63:78:a9:2b:3f:09:cb:05:81:db:59:86 WinSCP 显示:ssh-e
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我正在尝试实现 Android-6.0-marshmallow 中引入的指纹,但遇到了一个问题。 问题是当我尝试运行此处提供的示例代码时 android-FingerprintDialog 它不止一次
我正在寻找一种算法来匹配两个整数数组。例如: 引用: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 候选人: FF FF FF 01 02 03 FF
在 musicg 中,我可以通过以下代码比较 Wave 文件的指纹: double score = new FingerprintsSimilarity( new Wave("voice1.w
我的目标是实现第三方网站证书的 SHA1 指纹。我可以使用 openssl 成功获取它但是,当我尝试使用 python 代码实现它时,它并没有变得相同。使用 python 代码获取的 SHA1 指纹与
我正在编写一个脚本来查找大型图像库中的重复项。目前我正在做一个两遍过滤器,首先找到相同大小的文件,然后在 10240 字节的文件上执行 sha256 以获得具有相同大小的文件的指纹(代码 here )
我需要对 GitHub 进行 SSH key 审核,但我不确定如何找到我的 RSA key 指纹。我最初按照指南在 Linux 上生成 SSH key 。 我需要输入什么命令来查找我当前的 RSA k
对于历史,我有一个带有 OS debian 的本地 VM(Virtualbox),在这个 VM 中我开发了一个 Web 应用程序。我使用 ssh 协议(protocol)登录。 今天,我面临一个奇怪的
我正在使用带 sprockets 的中间人将我的 js 和 css 文件打包到一个文件中。这很好用。但是我想知道是否可以在中间人中启用 sprockets 的指纹功能。 例如我的文件 all.js,其
在 MVC 应用程序中,我需要验证客户端证书是否由特定 CA 签名/颁发。 我知道如何获取 Request.ClientCertificate和 X509Certificate2从中,但我无法弄清楚如
我正在开发一个 Android 应用程序,该应用程序将使用手机的指纹传感器作为扫描仪来验证候选人,以与数据库中已存储的指纹进行比较。我该怎么办? 最佳答案 Android 的指纹功能仅用于根据设备对用
我们正在整合 Universal App Links .该设置需要将名为 assetlinks.json 的文件上传到 Web 服务,以便验证关联。 为调试版本生成指纹时,使用默认的 debug.ke
我目前正努力为我正在开发的 Unity3d 应用程序提供一些安全性,我想添加验证 apk 文件未被某些补丁程序篡改。我知道如何从构建的应用程序(如 keytool)获取 keystore 指纹,但我很
我正在尝试将 android Fingerprint 实现到示例应用程序中。使用的密码未被识别为有效 - 但我不知道为什么,因为基于 android 文档,它应该受到支持。 密码建立在: return
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我正在从 Google 获取 Google Play API key ,它要求输入 SHA1 指纹。我想知道什么是 SHA1 指纹?我还想知道是否可以从另一台计算机使用此 API key ? 最佳答案
我目前在非常轻量级(低处理器/低内存)的 Linux 设备上的 bash 脚本中使用 linux md5sum 命令来返回并记录单个目录中数千个名称相似的 32MB 文件的校验和。 md5sum ./
我正在尝试实现一种与我的后端服务器通信的方法,并确保我的后端仅在调用我的应用程序时才应答。 所以我的想法是,我只是将 SHA1/MD5 指纹与 HTTPS POST 请求一起发送,并在后端服务器上对其
这里有一些主题对如何查找相似图片非常有帮助。 我想做的是获取一张图片的指纹,在数码相机拍摄的不同照片上找出同一张照片。 SURF 算法似乎是独立于缩放、角度和其他失真的最佳方法。 我使用 OpenCV
我是一名优秀的程序员,十分优秀!