これは既存の質問がたくさんあるトピックですが、私は正確なケースをカバーする既存の回答を見つけることができません。JavaでC#で生成されたDSA署名を確認する
いくつかのJavaコードで文字列(URL)に署名し、その文字列をC#プログラムに渡す必要があります。
私は、DSA鍵ペアを生成するために、一度、次のJavaコードを実行します。
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);
KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();
/* save the private key in a file */
byte[] privkey = priv.getEncoded();
FileOutputStream privkeyfos = new FileOutputStream("key.priv");
privkeyfos.write(privkey);
privkeyfos.close();
/* save the public key in a file */
byte[] pubkey = pub.getEncoded();
FileOutputStream pubkeyfos = new FileOutputStream("key.public");
pubkeyfos.write(pubkey);
pubkeyfos.close();
私は、署名を生成するには、次のコードを使用しています。私のC#のコードで
public static String Sign(String keyPath, byte[] data)
{
FileInputStream keyfis = new FileInputStream(new File(keyPath, "key.priv"));
byte[] encKey = new byte[keyfis.available()];
keyfis.read(encKey);
keyfis.close();
PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(encKey);
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PrivateKey privKey = keyFactory.generatePrivate(privKeySpec);
Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
dsa.initSign(privKey);
ByteArrayInputStream in = new ByteArrayInputStream(data);
BufferedInputStream bufin = new BufferedInputStream(in);
byte[] buffer = new byte[1024];
int len;
while ((len = bufin.read(buffer)) >= 0)
{
dsa.update(buffer, 0, len);
}
bufin.close();
byte[] realSig = dsa.sign();
return new String(Base64.encodeBase64(realSig), "UTF-8");
}
は、私は、文字列、Base64でエンコードされた署名と最初のステップからの「key.public」ファイルへのアクセス権を持っています。
文字列が改ざんされているかどうかを判断するために、これらの要素と適切なライブラリを組み合わせたコードブロックを提供できますか?
グーグル「C#dsa verify example」はヒット数が多く、これらの例があなたのニーズをどのように満たしていないのか説明できますか? –
[C#でのDSA署名の検証]の複製が可能です。(http://stackoverflow.com/questions/1628305/verify-dsa-signature-in-c) –
@GregSリンク先の質問は私の質問に答える最良の候補者でした私が持っている "key.private"ファイルをどのように読み込むかについての詳細は含まれていません。 – mchr