.net 哈希计算、签名与验签
一、算法
哈希算法目前有以几种 1、sha256 2.sha384 3.sha512 数值越大,安全性越高,但计算速度越慢,需要在速度与效率之间进行选择,通常要求不高时,用sha256即可。
二、计算字符串的哈希值
byte[] buff = new byte[512];
buff = Encoding.UTF8.GetBytes("花木成畦手自栽花木成畦手自栽花木成畦手自栽花木成畦手自栽撒旦发射点发".ToCharArray());
byte[] bt= sh256.ComputeHash(buff);
string s64=Convert.ToBase64String(bt);
三、计算流的哈希值
System.IO.FileStream file = System.IO.File.Open("d:\\km.txt",FileMode.Open);
bt = sh256.ComputeHash(file, false);
s= Convert.ToBase64String(bt);
四、对哈希值签名
string s = _config.GetValue<string>("RSAPrivateKey");
k0=Convert.FromBase64String(s);
RSA rsa= RSA.Create();
int i;
rsa.ImportRSAPrivateKey(k0, out i);
k1=rsa.SignHash(bt,System.Security.Cryptography.HashAlgorithmName.SHA256,RSASignaturePadding.Pkcs1);
五、对哈希值验签
s = _config.GetValue<string>("RSAPublicKey");
k0 = Convert.FromBase64String(s);
rsa.ImportRSAPublicKey(k0, out i);
bool b = rsa.VerifyHash(bt, k1, System.Security.Cryptography.HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
六、总结
对互联网上需要传递的信息,特别是与商品交易有关的信息,发送与接收方需要进行签名认证。在日常工作中,需要对交易信息、合同信息等需要进行签名。如果直接对文本进行签名,则计算量十分大,影响网页响应。若先计算哈希值,再对哈希值(32字节)进行签名,则计算量很小,传输速度几乎不受影响。由于哈希值的(近似)唯一性,基本就可以认定签名有效。在保证安全的前提下,大大提高了网络传输效率。