android/java如何使用电子邮件地址加密布尔变量
我想在私有共享首选项中存储一个布尔变量。我想添加一些安全性,至少,对于根设备来说,不需要简单地修改布尔变量。我正在考虑使用电子邮件地址来加密布尔值。我读了一些stackoverflow,我可以将其转换为char[](这是什么??)然后用一个键进行xor(??)?我真的不懂加密理论,谁能提供一些示例代码来“用电子邮件地址加密布尔变量”?谢谢加密布尔值?真有趣android/java如何使用电子邮件地址加密布尔变量,android,encryption,Android,Encryption,我想在私有共享首选项中存储一个布尔变量。我想添加一些安全性,至少,对于根设备来说,不需要简单地修改布尔变量。我正在考虑使用电子邮件地址来加密布尔值。我读了一些stackoverflow,我可以将其转换为char[](这是什么??)然后用一个键进行xor(??)?我真的不懂加密理论,谁能提供一些示例代码来“用电子邮件地址加密布尔变量”?谢谢加密布尔值?真有趣 好的,你可以用很多不同的方法来隐藏 你可以使用一个数字(比如700)或一个字符串(比如“倪浩”),然后对照一个数字(如果你保存的数字是900
好的,你可以用很多不同的方法来隐藏 你可以使用一个数字(比如700)或一个字符串(比如“倪浩”),然后对照一个数字(如果你保存的数字是9009,那么它是真的,否则它是假的-在这个例子中,700不是9009,所以你会得到假的)或一个字符串(如果你保存的字符串是“倪浩”,那么它是真的,否则它是假的-在这个例子中,“倪浩”是“倪浩”,所以你会得到真实的答案),仅列举两种常见且简单的方法 你的幻想就是你的极限。
即使我仍然必须看到隐藏布尔值的意义,这是一个位 我读了一些stackoverflow,我可以将其转换为char[](这是什么??)然后用一个键进行xor(?)?我真的不懂加密理论。。。嗯,一点也不 任何人都可以提供一些示例代码来“加密带有电子邮件地址的布尔变量”。“倪浩”的例子就可以了。用一封电子邮件代替“倪浩”就行了(显然是假的,比如“example@no_address.com)完成。选项1:用户jBCrypt 从下载最新的jBCrypt 加密机的示例代码:
public class BooleanEncryptor {
public String encryptBoolean(String password, boolean value){
String pass = password + (value?"1":"0");
return BCrypt.hashpw(pass, BCrypt.gensalt());
}
public Boolean decryptBoolean(String password, String encrypted){
if(BCrypt.checkpw(password, password+"1")){
return true;
}
if(BCrypt.checkpw(password, password+"0")){
return false;
}
return null;
}
}
然后你可以做类似的事情
String encryptedBoolean = BooleanEncryptor.encrypt("email@example.com", true);
encryptor = new SampleEncryptor(myActivity);
encryptor.encryptBoolean(false);
并将结果存储在SharedReferences中
问题是在哪里安全地存储密码或电子邮件。所以我们有选择2
选项2:适用于Android 4.3及以上版本
扩展此示例以扩展它并创建一个加密程序,如下所示
public class SampleEncryptor extends SecretKeyWrapper{
private static final SecureRandom RANDOM = new SecureRandom();
private SharedPreferences pref;
private SecretKey secretKey;
private byte[] encryptedKey;
public SampleEncryptor(Context context)
throws GeneralSecurityException, IOException {
super(context, "myalias");
this.pref = context.getSharedPreferences("mySecretKeyStore", Context.MODE_PRIVATE);
String base64key = pref.getString("key", null);
if(base64key==null){
this.secretKey = KeyGenerator.getInstance("AES").generateKey();
this.encryptedKey = this.wrap(this.secretKey);
pref.edit().putString("key", Base64.encodeToString(encryptedKey, Base64.DEFAULT)).commit();
}else{
this.encryptedKey = Base64.decode(base64key, Base64.DEFAULT);
this.secretKey = this.unwrap(this.encryptedKey);
}
}
public byte[] encrypt(byte[] data) throws GeneralSecurityException{
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
public byte[] decrypt(byte[] data) throws GeneralSecurityException{
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
public String encryptBoolean(boolean value) throws GeneralSecurityException{
BigInteger i = new BigInteger(128, RANDOM);
if(value){
i = i.setBit(0);
}else{
i = i.clearBit(0);
}
byte[] encrypted = encrypt(i.toByteArray());
return Base64.encodeToString(encrypted, Base64.DEFAULT);
}
public Boolean decryptBoolean(String encrypted) throws GeneralSecurityException{
byte[] data = Base64.decode(encrypted, Base64.DEFAULT);
BigInteger i = new BigInteger(decrypt(data));
return i.testBit(0);
}
}
然后你可以做类似的事情
String encryptedBoolean = BooleanEncryptor.encrypt("email@example.com", true);
encryptor = new SampleEncryptor(myActivity);
encryptor.encryptBoolean(false);
因为它是一个布尔值,如果它是真的,你可以把它设为假,如果它是假的,你可以把它设为真。