1
public static String doGenerate() {
    int val = 10000000;
    Random r = new Random();
    int gen = r.nextInt(89999999);
    int gen1 = r.nextInt(89999999);
    gen = val + gen;
    gen1 = val + gen1;
    String reply = gen + "" + gen1;
    return reply;
}

これは、以下に示すAESアルゴリズムに必要なキーを生成するために使用する方法です。

public static void decryptFile(String keyString, String fileName){
    try {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        kgen.init(128);
        SecretKey key = (SecretKey) new SecretKeySpec(
            keyString.getBytes(), "AES");// kgen.generateKey();

        AESEncrypter encrypter = new AESEncrypter(key);

        encrypter.decrypt(new FileInputStream(
            new java.io.File("").getCanonicalFile() +
            File.separator + "Received"+
            File.separator + fileName),
            new FileOutputStream(new java.io.File("").getCanonicalFile() +
            File.separator + "Decrypted" + 
            File.separator + fileName));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

これはAESEncrypterメソッドです。

  public AESEncrypter(SecretKey key) {
    // Create an 8-byte initialization vector
    byte[] iv = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
            0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };

    AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
    try {
        ecipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

        // CBC requires an initialization vector
        ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
        dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

復号化した後、無効なキー例外が発生します:java.security.InvalidKeyException:無効なAESキーの長さ:64バイト。なぜこうなった?これに対する解決策はありますか?

4

1 に答える 1

1

キー生成関数に欠陥があります。整数のみを生成し、それらを文字列に変換するため、使用可能なキー スペースが大幅に減少し、キーが大幅に弱体化します。

ただし、AES キーに適した 16 バイトの値を生成します。最後にエラー メッセージを受け取ってからコードを変更したとしか思えませんか?

KeyGeneratorを使用して AES キーを生成する方法に戻すことを強くお勧めします。これにより、安全な方法でこれが行われます。

于 2013-02-22T08:14:32.213 に答える