0
RSA鍵ペアを使用してファイルに署名したいと思います。この目的のために、私はこのPerlスクリプトがあります。Crypt :: RSA(Perl)とjava.security.Signature(Java)の相互作用
#!/usr/bin/perl
use Crypt::RSA;
my $data = ... # File contents
my $rsa = new Crypt::RSA;
my $key = new Crypt::RSA::Key::Private(Filename => "stackoverflow.priv", Password => "*****");
my $signature = $rsa->sign(Message => $data, Key => $key, Armour => 0);
# Write signature to file
クライアント側では、私は、ファイルを確認するには、次のJava機能を使用したい:
private static final String PUBLICKEY_MOD = "190343051422614110006523776876348493...";
private static String PUBLICKEY_EXP = "65537";
public boolean check() {
byte[] data = ... // Data
byte[] dataSignature = ... // Signature (as calculated in the Perl script)
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(getPublicKey());
signature.update(data);
return signature.verify(dataSignature);
}
private PublicKey getPublicKey() {
RSAPublicKeySpec spec = new RSAPublicKeySpec(new BigInteger(PUBLICKEY_MOD), new BigInteger(PUBLICKEY_EXP));
KeyFactory factory = KeyFactory.getInstance("RSA");
return factory.generatePublic(spec);
}
しかし、check()
は常にfalseを報告します。私はすでに確認され、これらの事:
data
とdataSignature
は正しくPUBLICKEY_MOD
とPUBLICKEY_EXP
が正しいgetPublicKey()
ある読み込まれ- 正しい属性は、秘密鍵と公開鍵は一部でありのPublicKeyを返します同じペアのうちのどれか
ファイルを正しく確認する方法を知っている人はいますか? signature
は正しくインスタンス化されていますか?
ありがとうございます!私はこれらの2つの問題を修正し、それは完全に動作します。ポイントを回答として追加したい場合は、それを解決策としてマークします。 – SecStone
SHA-256がPERLで動作するようにしたことを示してもらえますか?[この他の質問](http://stackoverflow.com/questions/12142381/is-there-a-perl-implementation-of-sha256withrsa )... –