У меня есть поле пароля. Я хочу зашифровать и расшифровать его.
Так что при вставке в SQLite шифровать, чем при чтении, расшифровывать.
Я следовал учебнику https://www.youtube.com/watch?v=kN8hlHO8US0.
Мое шифрование работает. Но моя расшифровка не работает.
У меня есть список администраторов. Когда я нажимаю один, я хочу увидеть их пароль (расшифрованный).
Приведенный ниже код отправляет пароль (зашифрованную строку) в mSyncAdminsDatabaseHelper, который получил метод decrypt ().
String placedecrypt = mSyncAdminsDatabaseHelper.decrypt(place.toString());
Toast.makeText(ViewAdmins.this, placedecrypt, Toast.LENGTH_SHORT).show();
на mSyncAdminsDatabaseHelper, у меня есть следующий код.
//set key
private SecretKey generateKey(String password) throws Exception {
final MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] bytes = password.getBytes("UTF-8");
digest.update(bytes, 0, bytes.length);
byte[] key = digest.digest();
SecretKey secretKey = new SecretKeySpec(key, "AES");
return secretKey;
}
//encrypt
private String encrypt(String password) throws Exception {
SecretKey key = generateKey(password);
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encval = c.doFinal(password.getBytes());
String encryptedValue = Base64.encodeToString(encval, Base64.DEFAULT);
return encryptedValue;
}
//decrypt
public String decrypt(String password) throws Exception {
SecretKey key = generateKey(password);
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.DECRYPT_MODE, key);
byte[] encval = c.doFinal(password.getBytes());
byte[] encryptedValue = Base64.decode(encval, Base64.DEFAULT);
String decryptedvalue = new String(encryptedValue);
return decryptedvalue;
}
Я получаю ошибку ниже
W/System.err: javax.crypto.IllegalBlockSizeException: last block incomplete in decryption
W/System.err: at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(BaseBlockCipher.java:1143)
at javax.crypto.Cipher.doFinal(Cipher.java:1736)
W/System.err: at com.example.photoapp.SyncAdminsDatabaseHelper.decrypt(SyncAdminsDatabaseHelper.java:182)
at com.example.photoapp.SyncAdminsDatabaseHelper.test(SyncAdminsDatabaseHelper.java:190)
at com.example.photoapp.ViewAdmins$1.onItemClick(ViewAdmins.java:100)
at android.widget.AdapterView.performItemClick(AdapterView.java:350)
W/System.err: at android.widget.AbsListView.performItemClick(AbsListView.java:1683)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:4094)
W/System.err: at android.widget.AbsListView$10.run(AbsListView.java:6583)