Hy大家,
我尝试使用RSA算法签署一条消息,我正在努力压缩Framwork这是我的代码:
private void Signer_Click(object sender, EventArgs e)
{
///cle de string ver byte[]
string clePriveeFile = @"\Program Files\PrivateKey.pem";
StreamReader reader = new StreamReader(clePriveeFile);
string contenuKeyPrivate = reader.ReadToEnd();
byte[] keyByte = Certification.DecodeOpenSSLPrivateKey(contenuKeyPrivate);
string Data = "Salut tout le monde";
byte[] DataBytes = System.Text.Encoding.UTF8.GetBytes(Data);//.UTF7.GetBytes(Data);
//Hasher le message
SHA1Managed sha1 = new SHA1Managed();
byte[] hash = sha1.ComputeHash(DataBytes);
string hach = Convert.ToBase64String(hash);
RSACryptoServiceProvider Rsa = Certification.DecodeRSAPrivateKey(keyByte);
byte[] sign = Rsa.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));
string resultat = Convert.ToBase64String(sign);
this.label1.Text = this.resultat;
}
使用'DecodeOpenSSLPrivateKey'和'DecodeRSAPrivateKey',这里使用的函数相同:http://www.jensign.com/opensslkey/index.html
得到我的哈希的结果:hash =“I4t474liO6H + p8SeDsoIkxmi8b0 =”
如果我用openSSL命令做同样的事情:$ echo“Salut tout le monde”| openssl dgst -sha1 | openssl enc -base64
我得到了这个:“NjFlOWI4Y2NjN2U2MzFkNTQwNTRmZjE1ZGUyYzk2MDczYTM2ZjRjZAo =”
与我的签名结果相同,使用此命令:
$ echo“Salut tout le monde”| openssl dgst -sha1 -sign PrivateKey.pem | openssl enc -base64
我有一个这样的签名: “V6c6XNK7O8 + IKKuGTGENdZwoWxhQLIEFHW7XSdoXzMAp1gLu8B5UxXi0lr6JhVDW6SI8p8PtlT + fxEoafY + ZCigIq4xW6e32f6hxYWeYi7silh44I1m7LF7JYR1lfcegnO0Cw + YPqLPRrZUbdcrvMo1ijUGH3SuK + iot2lait9s =”
使用我的代码我得到了这个:
结果= “YlbnppFDP5ejdYOPoUI / 1W6i + ClrKrxbIdA24IqllGDRWGBrWLtGwlfNkh4 + B + gzcrX8HI7PkNP1Pq2ud1jE4EhfUVjBkZJwXj / ZYI3fPF41oiIMdF63lZiR / SEHQ5rMTbdsfQtkkBmFTr8udCJNnmnSimRQ458nZvIsYOUW6j4 =”
我无法找到我的错误:(有人能帮帮我吗?
答案 0 :(得分:1)
一个问题是echo
输出包含换行符后缀。尝试哈希“Salut tout le monde \ n”。
另一个是OpenSSL以十六进制编码格式输出SHA1摘要,因此在Base64中对结果进行编码是没有意义的。
答案 1 :(得分:0)
或在openssl命令行中,使用echo | set / p = Salut tout le monde | openssl
/ p将取消回车