【原創(chuàng)】 RSA對(duì)文件進(jìn)行簽名操作
發(fā)布日期:2022/11/21 作者:
瀏覽:832
先看看工具大概長(zhǎng)啥樣
我們先選取一個(gè)文件,然后對(duì)文件進(jìn)行簽名,簽名返回的是128位的byte[]數(shù)組,為了顯示方便,我們進(jìn)行編碼轉(zhuǎn)換,以base64 格式進(jìn)行顯示。當(dāng)然,RSA簽名是有私鑰支持才可以的。用私鑰簽名,然后再用公鑰進(jìn)行驗(yàn)簽操作。以下是相關(guān)代碼
//文件簽名 private void bt_filesignature_Click(object sender, EventArgs e) { try { if (File.Exists(this.tb_filepath.Text)==false) { MessageBox.Show("請(qǐng)先選擇一個(gè)有效的文件路徑"); return; } byte[] data = File.ReadAllBytes(this.tb_filepath.Text); (byte[] signature, string PublicKey) = Tools.Signature(this.tb_prkey.Text,data); this.tb_signatrue.Text=Convert.ToBase64String(signature); this.tb_key_32.Text=Convert.ToBase64String(signature.Take(32).ToArray()); this.tb_iv_16.Text=Convert.ToBase64String(signature.Skip(32).Take(16).ToArray()); } catch (Exception ex) { this.tb_signatrue.Text=ex.Message+ex.InnerException?.Message; } }
簽名成功后返回兩個(gè)數(shù)據(jù),一個(gè)是簽名本身,一個(gè)是公鑰,是返回給客戶驗(yàn)簽用的。
public static (byte[],string) Signature(string PriKey, byte[] data)
{
var rsaWrite = new RSACryptoServiceProvider();
rsaWrite.FromXmlString(PriKey);
string PublicKey = rsaWrite.ToXmlString(false);
//簽名
byte[] signature = rsaWrite.SignData(data, SHA1.Create());
return (signature ,PublicKey);
}
下拉加載更多評(píng)論