Я использую следующий код в своем приложении для Android, чтобы зашифровать строку в Triple DES с помощью < em> Режим зашифрованной кодовой книги (ECB) с тремя независимыми ключами (также известными как 3DESede), которые предоставляются в виде массива ключей размером 24 байта. Поэтому я использую Java Crypto API. Это работает довольно хорошо, но если я зашифрую строку из восьми символов, я получу 16-байтовый зашифрованный текст, чего не должно происходить, поскольку 3DES работает с фрагментами по 64 бита (соответственно 8 байтов). То же самое справедливо и для заполнения PKCS5, так как это также работает с фрагментами 64-бит. Итак, мой вопрос: что вызывает эту проблему?
private static byte[] encryptText(String plaintext, byte[] keyBytes) throws Exception {
// Get plaintext as ASCII byte array
final byte[] plainBytes;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
plainBytes = plaintext.getBytes(StandardCharsets.US_ASCII);
} else {
plainBytes = plaintext.getBytes("US-ASCII");
}
// Generate triple DES key from byte array
final DESedeKeySpec keySpec = new DESedeKeySpec(keyBytes);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey key = keyFactory.generateSecret(keySpec);
// Setup the cipher
final Cipher c3des = Cipher.getInstance("DESede/ECB/PKCS5Padding");
c3des.init(Cipher.ENCRYPT_MODE, key);
// Return ciphertext
return c3des.doFinal(plainBytes);
}