C# RSA 无 长度限制 加密解密 示例
来源:互联网 发布:中医客户档案软件 编辑:程序博客网 时间:2024/06/05 06:36
RSA 是一种非对称加密算法。由于算法特性,加密和解密过程用不同密钥,即公钥和私钥,而被广泛应用于数字证书的安全管理。 在具体应用中,公钥用加密而私钥用于解密,或 私钥用于数字签名而公钥用于签名验证。由于非对称加密算法比价复杂,耗时较长,所以一般在网络环境中RAS 被应用于 签名认证,或小数据传输,如 AES 对称密钥传输。
在.Net 框架中,默认提供的辅助类只能对密钥长度大小相同的数据进行加密解密。 此文提供C# RSA 算法示例一座优化,可以不限数据大小。此实例 仅供交流学习。
RSA 加密
public string RsaEncrypt(string rawInput, string publicKey) { if (string.IsNullOrEmpty(rawInput)) { return string.Empty; } if(string.IsNullOrWhiteSpace(publicKey)) { throw new ArgumentException("Invalid Public Key"); } using (var rsaProvider = new RSACryptoServiceProvider()) { var inputBytes = Encoding.UTF8.GetBytes(rawInput);//有含义的字符串转化为字节流 rsaProvider.FromXmlString(publicKey);//载入公钥 int bufferSize = (rsaProvider.KeySize / 8) - 11;//单块最大长度 var buffer = new byte[bufferSize]; using (MemoryStream inputStream = new MemoryStream(inputBytes), outputStream = new MemoryStream()) { while (true) { //分段加密 int readSize = inputStream.Read(buffer, 0, bufferSize); if (readSize <= 0) { break; } var temp = new byte[readSize]; Array.Copy(buffer, 0, temp, 0, readSize); var encryptedBytes = rsaProvider.Encrypt(temp, false); outputStream.Write(encryptedBytes, 0, encryptedBytes.Length); } return Convert.ToBase64String(outputStream.ToArray());//转化为字节流方便传输 } } }
RSA 解密
public string RsaDecrypt(string encryptedInput, string privateKey) { if (string.IsNullOrEmpty(encryptedInput)) { return string.Empty; } if (string.IsNullOrWhiteSpace(privateKey)) { throw new ArgumentException("Invalid Private Key"); } using (var rsaProvider = new RSACryptoServiceProvider()) { var inputBytes = Convert.FromBase64String(encryptedInput); rsaProvider.FromXmlString(privateKey); int bufferSize = rsaProvider.KeySize / 8; var buffer = new byte[bufferSize]; using (MemoryStream inputStream = new MemoryStream(inputBytes), outputStream = new MemoryStream()) { while (true) { int readSize = inputStream.Read(buffer, 0, bufferSize); if (readSize <= 0) { break; } var temp = new byte[readSize]; Array.Copy(buffer, 0, temp, 0, readSize); var rawBytes = rsaProvider.Decrypt(temp, false); outputStream.Write(rawBytes, 0, rawBytes.Length); } return Encoding.UTF8.GetString(outputStream.ToArray()); } } }
0 0
- C# RSA 无 长度限制 加密解密 示例
- C#使用RSA证书文件加密和解密示例(任意长度的内容)
- RSA加密解密(无数据大小限制go实现)
- C# RSA加密解密
- C#使用RSA证书文件加密和解密示例
- 基于RSA的加密/解密示例C#代码
- RSA加解密的长度限制
- c#实现RSA加密解密
- C#实现RSA加密解密
- C# RSA加密与解密
- RSA加密,不受字节长度限制
- RSA加密 解密 示例及源码
- C#里的一些加密解密标准函数示例——DES,SHA1,RSA
- C#里的一些加密解密标准函数示例——DES,SHA1,RSA
- C#里的一些加密解密标准函数示例——DES,SHA1,RSA
- C# AES 加密解密示例
- C#实现RSA加密解密源码
- C# java 通用 RSA 加密/解密
- C语言中函数strlen等的实现
- 对象和数组:JVM中,处理对象和数组的字节码介绍
- 【BZOJ 4326】运输计划【树链剖分+差分+二分答案】
- 413. Arithmetic Slices
- scikit-learn 线性回归算法库小结
- C# RSA 无 长度限制 加密解密 示例
- js正则表达式
- Spring消息(一)
- JavaScript 语句标识符
- 网络编程——socket套接字编程(三)
- [区间dp]Hdu2467 String painter
- Android中的通知:Toast,对话框,状态栏
- 操作系统的几种基本类型
- 数据库压力测试--MySQL数据库快速插入大量数据