不限制长度Rsa加密算法超出117解决方案.doc_第1页
不限制长度Rsa加密算法超出117解决方案.doc_第2页
不限制长度Rsa加密算法超出117解决方案.doc_第3页
不限制长度Rsa加密算法超出117解决方案.doc_第4页
不限制长度Rsa加密算法超出117解决方案.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Rsa加密算法加密长度限制是117字节,下面展示的是不限制长度rsa改造方法包含的有加密解密 加密的内容与原类型比较是否所有值都相等以及一个单元测试public class RsaHelper public static string PubKey =” 自己用下面生成的”; /公钥 public static string PriKey =” 自己用下面生成的”; /私钥 public struct RsaKey public string PublicKey get; set; public string PrivateKey get; set; / / 创建公钥私钥 / / static public RsaKey GEN_Key() var rsa = new RSACryptoServiceProvider(); return new RsaKey() /写死加快执行速度 /PublicKey = rsa.ToXmlString(false), /生成公钥 自己生成填到上面 /PrivateKey = rsa.ToXmlString(true) /生成私钥 自己生成填到上面 ; / / 解密 / / 要解密的字符串 / 私钥 / public static 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 bytebufferSize; 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 bytereadSize; 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(); / / 加密 / / 要加密的字符串 / 公钥 / public static 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 bytebufferSize; 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 bytereadSize; Array.Copy(buffer, 0, temp, 0, readSize); var encryptedBytes = rsaProvider.Encrypt(temp, false); outputStream.Write(encryptedBytes, 0, encryptedBytes.Length); return Convert.ToBase64String(outputStream.ToArray();/转化为字节流方便传输 / / 加密后的字符串反序列化成类和原类值比对 / / / / / public static bool Compare(T tOri, string strEncry) try var decryStr = RsaDecrypt(strEncry, PriKey); var flag = true; T tDecry = JsonConvert.DeserializeObject(decryStr); PropertyInfo propertyInfos1 = tOri.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var propertyInfo in propertyInfos1) var name = propertyInfo.Name; var val1 = propertyInfo.GetValue(tOri, null); var val2 = tDecry.GetType().GetProperty(name).GetValue(tDecry, null); if (val1.ToString() != val2.ToString() flag = false; break; return flag; catch (Exception) return false; 单元测试部分class TestClass public string sc get; set; public string no get; set; public string na get; set; TestMethod public void TestRsa() var testClass = new TestClass() sc = his51, no = 1, na = 管理员 ; /公钥加密 var encryptStr=RsaHelper.RsaEncrypt(JsonConvert.SerializeObject(testClass), RsaHelper.PubKey); /私钥解密 var decryptStr = RsaHelper.RsaDecrypt(encryptStr, RsaHelper.PriKey); /类值加密字符串校验 var flag = RsaHelper.Compare(testClass, encryptStr); Assert.IsTrue(flag); TestMe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论