对称加密(DES、3DES)、非对称加密(RSA、SHA1withRSA)

参考:  对称加密(DES、3DES)、非对称加密(RSA、SHA1withRSA)_预立数据科技-CSDN博客

一、支付宝工具生成公钥私钥

下载地址链接: https://pan.baidu.com/s/15L1GM8mK43tzV9XyyNEV8Q

提取码: vux3

使用方法可参考阿里文档:网页&移动应用学习路径 | 网页&移动应用

二、加密

说明:1.使用私钥签名,  2.签名后每次结果是不变的

三、解密

说明:1.使用公钥验证签名

四、实现代码

利用工具可生成公私秘钥,注意(java版本与非java版本)

1.公钥  "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCO772dmiRP4HaddeZTUieS4SWrNnbRPIgxoF5wLZNK1nel3hf7uffWkZ5lzjSuLig5sgPzU/oQgophIG9+NwoHeyXPgnhNV8zPluueHFrQzrSnq9jhUS1yxTezmYr+oxAQIyGQUZO21Sg1+2lqDyatPpRfN4JSKusAw9yOcbkHKQIDAQAB"

2.私钥  "MIICXgIBAAKBgQCO772dmiRP4HaddeZTUieS4SWrNnbRPIgxoF5wLZNK1nel3hf7uffWkZ5lzjSuLig5sgPzU/oQgophIG9+NwoHeyXPgnhNV8zPluueHFrQzrSnq9jhUS1yxTezmYr+oxAQIyGQUZO21Sg1+2lqDyatPpRfN4JSKusAw9yOcbkHKQIDAQABAoGAArchNgZAnFfaSQF9X6XW5J5sVcVSGoV43OB8CsuC2dAbM8Z1VC3jPGtFxA9XxttPnlD4bD3zKS8hq9iu5YnsIdL7bt1hu2vOW2UGtIPfYtTMK49BcgYHk1zIlQh21Jt403SM0hDmbpy/R32QQ3cv5jWnVvlEqiULyOC0joe9vTUCQQDAv4dOl3v3HQ40cWoe7RUKqbn0bBM4xIx2fwMBJTMJFJFWBq97CwtvuwKnlWle5dRDLTrwt7rETfNPW898nb3jAkEAvdeci8MLDAQE9KeIyxJK1170ahwkxTcO8miI5o/u6AekWk+YuNJh871YKoxwqPtD/2cDQH3PLxwklvVJExJ0gwJBAJ7QcP1ZpcPLxfuCA21t7St3A4gYUJIyqIWuS1xzOSTfNI0MPySDyi2KijpoyoRtnEKpjunuiM3caIDX5hMIqf8CQQCfFzYoZa43RpMEl/VqAI1ZiUiYN7eU0fwjpvi7Bvm11tmjmTqqABx4Dz/4gDLVWaP1P9WY0RW0LAh5vVqcsgWTAkEAk27NKkvwGR37bcHF2QwxeQkY+5pamJhIGvEm+dbhOm9P1mmcujrfZ49Aegy3RiIBQACHRNgjC6sYZcrs/wPrXw=="

3.加密调用:SHA1withRSA.Sign("待签名字符串", "私钥", "UTF-8");

4.解密调用:SHA1withRSA.Verify("待签名字符串", "签名后字符串", "公钥 ", "UTF-8");

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;namespace Common
{public  class SHA1withRSA{/// <summary>/// SHA1withRSA签名/// </summary>/// <param name="content">待签名字符串</param>/// <param name="privateKey">私钥</param>/// <param name="input_charset">编码格式</param>/// <returns>签名后字符串</returns>public static string Sign(string content, string privateKey, string input_charset){byte[] Data = Encoding.GetEncoding(input_charset).GetBytes(content);RSACryptoServiceProvider rsa = DecodePemPrivateKey(privateKey);using (var sh = SHA1.Create()){byte[] signData = rsa.SignData(Data, sh);return Convert.ToBase64String(signData);}}/// <summary>/// pem格式公钥验签/// </summary>/// <param name="content">待验签字符串</param>/// <param name="signedString">签名</param>/// <param name="publicKey">公钥</param>/// <param name="input_charset">编码格式</param>/// <returns>true(通过),false(不通过)</returns>public static bool Verify(string content, string signedString, string publicKey, string input_charset){bool result = false;byte[] Data = Encoding.GetEncoding(input_charset).GetBytes(content);byte[] data = Convert.FromBase64String(signedString);RSAParameters paraPub = ConvertFromPublicKey(publicKey);RSACryptoServiceProvider rsaPub = new RSACryptoServiceProvider();rsaPub.ImportParameters(paraPub);using (var sh = SHA1.Create()){result = rsaPub.VerifyData(Data, sh, data);return result;}}#region 内部方法private static RSACryptoServiceProvider DecodePemPrivateKey(String pemstr){RSACryptoServiceProvider rsa = DecodeRSAPrivateKey(Convert.FromBase64String(pemstr));return rsa;}private static RSACryptoServiceProvider DecodeRSAPrivateKey(byte[] privkey){byte[] MODULUS, E, D, P, Q, DP, DQ, IQ;// --------- Set up stream to decode the asn.1 encoded RSA private key ------MemoryStream mem = new MemoryStream(privkey);BinaryReader binr = new BinaryReader(mem); //wrap Memory Stream with BinaryReader for easy readingbyte bt = 0;ushort twobytes = 0;int elems = 0;try{twobytes = binr.ReadUInt16();if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)binr.ReadByte(); //advance 1 byteelse if (twobytes == 0x8230)binr.ReadInt16(); //advance 2 byteselsereturn null;twobytes = binr.ReadUInt16();if (twobytes != 0x0102) //version numberreturn null;bt = binr.ReadByte();if (bt != 0x00)return null;//------ all private key components are Integer sequences ----elems = GetIntegerSize(binr);MODULUS = binr.ReadBytes(elems);elems = GetIntegerSize(binr);E = binr.ReadBytes(elems);elems = GetIntegerSize(binr);D = binr.ReadBytes(elems);elems = GetIntegerSize(binr);P = binr.ReadBytes(elems);elems = GetIntegerSize(binr);Q = binr.ReadBytes(elems);elems = GetIntegerSize(binr);DP = binr.ReadBytes(elems);elems = GetIntegerSize(binr);DQ = binr.ReadBytes(elems);elems = GetIntegerSize(binr);IQ = binr.ReadBytes(elems);// ------- create RSACryptoServiceProvider instance and initialize with public key -----CspParameters CspParameters = new CspParameters();CspParameters.Flags = CspProviderFlags.UseMachineKeyStore;RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(1024, CspParameters);RSAParameters RSAparams = new RSAParameters();RSAparams.Modulus = MODULUS;RSAparams.Exponent = E;RSAparams.D = D;RSAparams.P = P;RSAparams.Q = Q;RSAparams.DP = DP;RSAparams.DQ = DQ;RSAparams.InverseQ = IQ;RSA.ImportParameters(RSAparams);return RSA;}catch{return null;}finally{binr.Dispose();}}private static int GetIntegerSize(BinaryReader binr){byte bt = 0;byte lowbyte = 0x00;byte highbyte = 0x00;int count = 0;bt = binr.ReadByte();if (bt != 0x02) //expect integerreturn 0;bt = binr.ReadByte();if (bt == 0x81)count = binr.ReadByte();    // data size in next byteelseif (bt == 0x82){highbyte = binr.ReadByte(); // data size in next 2 byteslowbyte = binr.ReadByte();byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };count = BitConverter.ToInt32(modint, 0);}else{count = bt; // we already have the data size}while (binr.ReadByte() == 0x00){   //remove high order zeros in datacount -= 1;}binr.BaseStream.Seek(-1, SeekOrigin.Current);   //last ReadByte wasn't a removed zero, so back up a bytereturn count;}#endregion#region 生成的Pemprivate static RSAParameters ConvertFromPublicKey(string pemFileConent){if (string.IsNullOrEmpty(pemFileConent)){throw new ArgumentNullException("pemFileConent", "This arg cann't be empty.");}pemFileConent = pemFileConent.Replace("-----BEGIN PUBLIC KEY-----", "").Replace("-----END PUBLIC KEY-----", "").Replace("\n", "").Replace("\r", "");byte[] keyData = Convert.FromBase64String(pemFileConent);bool keySize1024 = (keyData.Length == 162);bool keySize2048 = (keyData.Length == 294);if (!(keySize1024 || keySize2048)){throw new ArgumentException("pem file content is incorrect, Only support the key size is 1024 or 2048");}byte[] pemModulus = (keySize1024 ? new byte[128] : new byte[256]);byte[] pemPublicExponent = new byte[3];Array.Copy(keyData, (keySize1024 ? 29 : 33), pemModulus, 0, (keySize1024 ? 128 : 256));Array.Copy(keyData, (keySize1024 ? 159 : 291), pemPublicExponent, 0, 3);RSAParameters para = new RSAParameters();para.Modulus = pemModulus;para.Exponent = pemPublicExponent;return para;}#endregion}
}

欢迎加群,日用儿童母婴分享大牌淘宝京东优惠券

C# 实现SHA1withRSA相关推荐

  1. java nonewithrsa,如何使“MessageDigest SHA-1和Signature NONEwithRSA”等同于“Signature SHA1withRSA”...

    我有兴趣将带有RSA签名的SHA-1哈希应用于某些数据,但我需要分两步完成 – 首先应用哈希然后对数据进行签名. Signature.sign()函数似乎创建了一个最终签名的更复杂(ASN.1?)的数 ...

  2. sha1withRSA md5withRSA分析

    sha1withRSA哈希算法分析 2017年记   偶然翻到14年写的这篇文章,觉得文章写的比较模糊,再来补充说明下. 简介 sha1withRSA哈希算法的原理跑剖析,sha1withRSA算法的 ...

  3. PHP SHA1withRSA加密生成签名及验签

    最近公司对接XX第三方支付平台的代付业务,由于对方公司只有JAVA的demo,所以只能根据文档自己整合PHP的签名加密,网上找过几个方法,踩到各种各样的坑,还好最后算是搞定了,话不多说,代码分享出来. ...

  4. java sha1withrsa公钥加密_数字签名----sha1withrsa

    项目中进行了sha1withrsa数字签名.对此总结一下吧. 浅谈加密与签名 我们一般的加密主要分2种.对称加密.非对称加密.顾名思义.对称加密就是秘钥是一样的.通过同一个秘钥加密解密.这一类的加密算 ...

  5. MD5 SHA1 SHA256 SHA512 SHA1WithRSA RSA 的区别

    转自:http://www.cnblogs.com/cxygg/p/9468653.html https://blog.csdn.net/hengshujiyi/article/details/459 ...

  6. SHA1WithRSA签名使用openssl 实现

    引言: 2017年就要到了,想想自己使用阿里云搭的博客 眼看就要到期了. 虽说没写几遍有质量的文章吧,但是放其不管也于心不忍.这几天就琢磨着把几遍有内容的转到博客中.在寻求着落点的时候发现Markdo ...

  7. php java sha1_PHP 种的 SHA1WithRSA

    最近和java对接接口看文档就是rsa 一开始怎么也调不通:以为就是rsa 加密一把 他们只给一个key 一个字符串 MIIBVAIBADxxxxxxxEAAkEApWBS7aJbksmufLQZ88 ...

  8. java sha1withrsa公钥加密,sha1withrsa在线加密

    (); Rsa_Op ro =new Rsa_Op(); Sig s = new Sig(); "使用 SHA-1 算法生成摘要"); ("SHA1WithRSA&quo ...

  9. php SHA1withRSA算法签名

    public function getSign($data,$key){foreach ($data as $k => $v){$Parameters[$k] = $v;}//签名步骤一:按字典 ...

  10. 签名算法:SHA1withRSA

    SHA1withRSA简介 因工作中对接金融机构,对数据的安全性较高故仅作为日志,部分涉及私密的信息就不贴出来. SHA1withRSA:浅显的理解,用SHA算法进行签名,用RSA算法进行加密. 注: ...

最新文章

  1. MySQL数据库开发理念_mysql之数据库基本理念
  2. Mybatis中typeAliases标签和package标签
  3. java 变量锁_并发编程高频面试题:可重入锁+线程池+内存模型等(含答案)
  4. 我不知道的事——深克隆和浅克隆
  5. Oracle给表和字段添加注释
  6. 今天的凉爽的学习环境 录音软件
  7. kafka消息队列的概念理解
  8. SpringBoot-Websocket
  9. nginx搭建tomcat集群
  10. 吴恩达神经网络和深度学习-学习笔记-35-残差网络(Residual Network)
  11. AD9371官网汇总
  12. 关于vscode软件更换软件背景的问题
  13. 在开发板运行可执行文件,报错 Syntax error: word unexpected (expecting “)“)
  14. c语言编程实现今日星期几,计算任何一天是星期几的C语言源代码.
  15. 解决鼠标滚轮每次滑动行数过多的办法
  16. l完整的计算机系统,一个完整的计算机系统包括
  17. 王自如发致歉声明 称对现有业务进行整改
  18. WordBias | 可视化文本中的偏见(刻板印象)
  19. 经典趣味数学问题之过河问题
  20. 大数据产业助力上饶经济转型

热门文章

  1. 使用word生成xps文件的两种方式
  2. 邮件服务器实例(debian+posfix+cyrus+squirrelmail)
  3. 工业4.0物联网等将成为下一波泡沫?
  4. android radiobutton 监听事件,Android View系列---RadioGroup与RadioButton
  5. 开启telnet的几种方法
  6. 【25】模型参数量Params与计算量Flops的计算方法
  7. Delphi 替换字符函数
  8. [渝粤教育] 西南政法大学 经济法学 参考 资料
  9. sql count函数
  10. 大厂浅谈项目经理和产品经理的区别,别抬杠,抬杠就是你对