のPKS5パディングと3DESedeを使用した場合3DESede)、24バイトのサイズのキー配列として提供されています。したがって、私はJava Crypto APIを使用します。これはかなりうまくいきますが、私が8文字の文字列を暗号化すると、16バイトの暗号テキストが得られます。これは、3DESが64ビット(8バイト)のチャンクで動作するため起こりません。 PKCS5 paddingも同様です。これは64ビットのチャンクでも動作するためです。だから私の質問は、この問題の原因は何ですか? DESで使用される場合間違った暗号文の長さは別名(Iは、3つの独立したキーで<em>暗号化されたコードブック</em>(ECB)モードを使用して<a href="https://en.wikipedia.org/wiki/Triple_DES" rel="nofollow noreferrer">Triple DES</a>内の文字列を暗号化するために、私のアンドロイドアプリケーションに次のコードを使用していますjavax.cryptoで
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);
}
1.新しいコードで3DESを使用しないことをお勧めします.AESは現在の対称暗号化標準です。 2. ECBモードを使用しないでください。安全ではありません。[ECBモード](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29)を参照して、ペンギンまでスクロールしてください。 乱数IVを使用してCBCモードを使用し、暗号化されたデータにIVを使用して復号化に使用するだけで、秘密にする必要はありません。 3.暗号化は簡単で、安全な使用を困難にします。 – zaph