秘密鍵でメッセージに署名し、公開鍵で検証したいが、それを動作させることができない。rsaでデータを正しく検証する方法は?
ここに私がデータに署名する方法(編集済みだが動作しない) :ここでは
public static string SignData(string message, string privateKey) {
byte[] plainText = ASCIIEncoding.Unicode.GetBytes(message);
var rsaWrite = new RSACryptoServiceProvider();
rsaWrite.FromXmlString(privateKey);
byte[] signature = rsaWrite.SignData(plainText, new SHA1CryptoServiceProvider());
return Convert.ToBase64String(signature);
}
は、私は(まだ動作していない、編集された)データをテストする方法です:
public static bool VerifyData(string sign, string publicKey, string orig) {
byte[] signature = Convert.FromBase64String(sign);
byte[] original = ASCIIEncoding.Unicode.GetBytes(orig);
var rsaRead = new RSACryptoServiceProvider();
rsaRead.FromXmlString(publicKey);
if (rsaRead.VerifyData(original, new SHA1CryptoServiceProvider(), signature)) {
return true;
} else {
return false;
}
}
私は自分のアカウントクラス内のXML文字列として鍵ペアを格納します。この機能は、account.csのコンストラクタで実行されます。
私はこれで全体の事をテスト:
string signedHash = Utility.SignData("test" ,account.privateKey);
if (Utility.VerifyData(signedHash, account.publicKey, "test")) {
Console.WriteLine("WORKING!");
} else {
Console.WriteLine("SIGNING NOT WORKING");
}
はなぜ全体的なことが認識されないのは?私の推測では、いくつかのエンコーディングのために動作しないということです。
'return ASCIIEncoding.Unicode.GetString(signature);'は間違っていて、理解できません。バイト配列 'signature'を返すだけで、文字列にしようとしないでください。 –