2

簡単な暗号化/復号化コーディングを行っていますが、自分では理解できない問題があります。

16 進数でエンコードされた暗号文があります。暗号文はブロック長128bit、鍵長256bitのAESです。暗号ブロック モードは CBC です。IV は暗号文の最初のブロックです。

例外メッセージは不正なキー サイズです。

ここに私の復号化()関数があります:

public static byte[] decrypt() throws Exception
{
    try{
        byte[] ciphertextBytes = convertToBytes("cb12f5ca1bae224ad44fdff6e66f9a53e25f1000183ba5568958430c11c6eafc62c04de8bf27e0ac7104b598fb492142");
        byte[] keyBytes = convertToBytes("CFDC65CB003DD50FF5D6D826D62CF9CA6C64489D60CB02D18C1B58C636F8220D");
        byte[] ivBytes = convertToBytes("cb12f5ca1bae224a");

        SecretKey aesKey = new SecretKeySpec(keyBytes, "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(ivBytes));

        byte[] result = cipher.doFinal(ciphertextBytes);
        return result;
    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }
     return null;
}

そして、文字列/バイト配列の変換を行う関数があります

    //convert ByteArray to Hex String
public static String convertToHex(byte[] byteArray)
{
    StringBuilder sb = new StringBuilder();
    for (byte b : byteArray)
    {
        sb.append(String.format("%02X", b));
    }
    return sb.toString();
}

//convert String to ByteArray
private static byte[] convertToBytes(String input) {
    int length = input.length();
    byte[] output = new byte[length / 2];

    for (int i = 0; i < length; i += 2) {
        output[i / 2] = (byte) ((digit(input.charAt(i), 16) << 4) | digit(input.charAt(i+1), 16));
    }
    return output;
}

多分あなたは私を助けることができます。どうもありがとうございました!

4

1 に答える 1

5

Oracle JRE のキーサイズ制限に達した可能性があります。リンクされたドキュメントから:

より強力なアルゴリズム (たとえば、256 ビット キーを使用する AES) が必要な場合は、JCE Unlimited Strength Jurisdiction ポリシー ファイルを取得して JDK/JRE にインストールする必要があります。

この行為が現地の規制の下で許容されるかどうかを確認するのは、ユーザーの責任です。

于 2013-11-22T20:38:22.417 に答える