web-dev-qa-db-ja.com

テキストをAES / CBC / PKCS7Paddingに暗号化する

Java 6.でテキストを暗号化するWebアプリケーションを開発しています。

私がしなければならない暗号化は、PKCS7パディングと128ビットキーを使用したCBCモードのAES(Rijndael)です。

私がしなければならないのと同じ方法で暗号化する方法を説明する記事を見ましたが、PKCS5パディングを使用しています。

記事のリンクはここにあります:

https://bit502.wordpress.com/2014/06/27/codigo-Java-encriptar-y-desencriptar-texto-usando-el-algoritmo-aes-con-cifrado-por-bloques-cbc- de-128ビット/

私は変える

private final static String cI = "AES/CBC/PKCS5Padding";

private final static String cI = "AES/CBC/PKCS7Padding";

しかし、Javaはこれのプロバイダーを見つけることができませんでした。

誰か私にどうすればよいか教えてもらえますか?

11
Shanty

JavaはPKCS#5パディングのみを提供しますが、PKCS#7パディングと同じです。 Crypto.SEでこの質問を参照してください。

PKCS#5パディングとPKCS#7パディングの違いは何ですか

これらは、AESやDESなどの一般的なブロック暗号と交換可能です。

18
Artjom B.

この方法を試してください

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;
    }
3
Erick Martinez

Java仕様には、サポートする必要のあるいくつかの暗号化モード(およびパディング)がリストされています。PKCS7Paddingは含まれていません。

これらは、任意のJava実装がサポートする必要があるAES/CBCモードです。

  • AES/CBC/NoPadding(128ビットキー)
  • AES/CBC/PKCS5Padding(128ビットキー)

(詳細については この回答 を参照してください)

Bouncy Castle には必要な機能があります。

2