Java 6.でテキストを暗号化するWebアプリケーションを開発しています。
私がしなければならない暗号化は、PKCS7パディングと128ビットキーを使用したCBCモードのAES(Rijndael)です。
私がしなければならないのと同じ方法で暗号化する方法を説明する記事を見ましたが、PKCS5パディングを使用しています。
記事のリンクはここにあります:
私は変える
private final static String cI = "AES/CBC/PKCS5Padding";
に
private final static String cI = "AES/CBC/PKCS7Padding";
しかし、Javaはこれのプロバイダーを見つけることができませんでした。
誰か私にどうすればよいか教えてもらえますか?
JavaはPKCS#5パディングのみを提供しますが、PKCS#7パディングと同じです。 Crypto.SEでこの質問を参照してください。
PKCS#5パディングとPKCS#7パディングの違いは何ですか
これらは、AESやDESなどの一般的なブロック暗号と交換可能です。
この方法を試してください
String KEY_AES = "**************";
public String encrypt(String value) {
try {
byte[] key = KEY_AES.getBytes("UTF-8");
byte[] ivs = KEY_AES.getBytes("UTF-8");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
AlgorithmParameterSpec paramSpec = new IvParameterSpec(ivs);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, paramSpec);
return Base64.encodeToString(cipher.doFinal(value.getBytes("UTF-8")), Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Java仕様には、サポートする必要のあるいくつかの暗号化モード(およびパディング)がリストされています。PKCS7Padding
は含まれていません。
これらは、任意のJava実装がサポートする必要があるAES/CBCモードです。
(詳細については この回答 を参照してください)
Bouncy Castle には必要な機能があります。