Последний блок не полностью расшифрован - Android Studio JAVA - PullRequest
1 голос
/ 25 октября 2019

У меня есть поле пароля. Я хочу зашифровать и расшифровать его.

Так что при вставке в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...