2

特定の文字列のHmacSHA-256ハッシュを必要とするXML-RPC呼び出しを行おうとしています。私は現在、次のコードでJasyptライブラリを使用しています。

StandardPBEStringEncryptor sha256 = new StandardPBEStringEncryptor();
          sha256.setPassword(key);
          sha256.setAlgorithm("PBEWithHmacSHA2");

sha256.encrypt(string)を使用しようとすると、次のエラーが発生します。

スレッド「メイン」の例外org.jasypt.exceptions.EncryptionInitializationException:java.security.NoSuchAlgorithmException:PBEWithHmacAndSHA256SecretKeyFactoryは使用できません
     org.jasypt.encryption.pbe.StandardPBEByteEncryptor.initialize(StandardPBEByteEncryptor.java:597)で
     org.jasypt.encryption.pbe.StandardPBEStringEncryptor.initialize(StandardPBEStringEncryptor.java:488)で
     org.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:541)で
     nysenateapi.XmlRpc.main(XmlRpc.java:52)で
    原因:java.security.NoSuchAlgorithmException:PBEWithHmacAndSHA256SecretKeyFactoryは使用できません
     javax.crypto.SecretKeyFactory。(DashoA13 * ..)で
     javax.crypto.SecretKeyFactory.getInstance(DashoA13 * ..)で
     org.jasypt.encryption.pbe.StandardPBEByteEncryptor.initialize(StandardPBEByteEncryptor.java:584)で
     ...さらに3つ

JCE Cryptography拡張機能をダウンロードし、jarをビルドパスに配置しましたが、何も実行されていないようです。上記のsetAlgorithmで、「PBE」、「PBEWithSha」(1 | 2 | 128 | 256)?、「PBEWithHmacSha」など、さまざまな組み合わせを使用してみました。

BouncyCastleも使ってみましたが、運が悪かったです。ヘルプやガイダンスをいただければ幸いです。

4

2 に答える 2

2

@Rookが正しく指摘しているように、暗号化アルゴリズムを含むPBEアルゴリズムを指定する必要があります。多くの例のうちの2つ"PBEWithSHA1AndDESede"は、SunJCEプロバイダーによってサポートされているものと"PBEWITHSHA256AND128BITAES-CBC-BC"、BouncycastleJCEプロバイダーによってサポートされているものです。

于 2010-10-21T00:24:02.483 に答える
1

コメントは役に立ちましたが、私は間違った質問をしていたと思います。私が探していたのは、PHP関数hash_hmac('sha256'、string、key)を模倣することでした...

私は次のコードを使用することになりました:

Mac mac = Mac.getInstance("HmacSha256");
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), "HmacSha256");
mac.init(secret);
byte[] shaDigest = mac.doFinal(phrase.getBytes());
String hash = "";
for(byte b:shaDigest) {
    hash += String.format("%02x",b);
}

しかし、ガイダンスをありがとう。きっと将来私を助けてくれるでしょう。

于 2010-10-22T14:06:53.470 に答える