1

しばらくの間、cflib.org で genAESKeyFromPW() 関数を使用しています。これをストレートJavaに変換する必要があります。すでに質問しましたが、回答が得られるかどうかを確認するためにここに投稿することにしました。

まず、cflib.org のgenAESKeyFromPW () を見てください。

それを見て、テスト用に次の Java コードを作成しました。

String filename = new String("foo");
String salt = new String(Base64.encodeBase64(filename.getBytes()));
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
PBEKeySpec spec = new PBEKeySpec(filename.toCharArray(),salt.getBytes(), 1024,128);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
System.out.println(new String(Base64.encodeBase64(secret.getEncoded())));

Java コードはuJvByU+ArEvtsb+7E1mblw== を返します

genAESKeyFromPW('foo',tobase64('foo')) を 呼び出すと、 7ZX9TKD8WVUlgTtbL/FN8w==が返されます。

文字エンコーディングの問題がある可能性があることを認識しています。getBytes() に UTF8 などを追加してみましたが、CF と Straight Java で同じ値を返す方法が見つかりませんでした。

誰かがこれに光を当てることができれば、それは大歓迎です。

4

1 に答える 1

2

以下のコードとその値を両方で使用してみてください。

    // The password
    String passwordString = "foo";

    // Base64 encoded random bytes used for the SALT.
    String saltString = "1234567890";

    char[] passwordChars = passwordString.toCharArray();
    byte[] saltBytes = Base64.decode(saltString);

    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    PBEKeySpec spec = new PBEKeySpec(passwordChars, saltBytes, 1024, 128);
    SecretKey secret = factory.generateSecret(spec);

    System.out.println(Base64.encodeBytes(secret.getEncoded()));
于 2013-05-30T20:04:48.043 に答える