首页 > 编程语言 >C#各种加密方法,字典排序

C#各种加密方法,字典排序

时间:2024-11-04 13:59:30浏览次数:1  
标签:加密 string C# return result new byte 字典

1、字符串加密

 

 /// <summary>
 /// 获取MD5加密字符串(type:0大写,1小写)
 /// </summary>
 /// <param name="content">加密内容</param>
 /// <param name="type">返回格式(0大写,1小写)</param>
 /// <returns></returns>
 public static string MD5Encrypt(string content, int type)
 {
     string result = string.Empty;
     try
     {
         if (string.IsNullOrEmpty(content))
             return result;
         MD5 md5 = MD5.Create();
         byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(content);
         byte[] hashBytes = md5.ComputeHash(inputBytes);
         result = BitConverter.ToString(hashBytes);
         result = type == 0 ? result.Replace("-", "").ToUpper() : result.Replace("-", "").ToLower();
         return result;
     }
     catch (Exception)
     {
         return result;
     }
 }

 /// <summary>
 /// SHA256签名加密
 /// </summary>
 /// <param name="data"></param>
 /// <returns></returns>
 public static string sha256(string data)
 {
     byte[] bytes = Encoding.UTF8.GetBytes(data);
     byte[] hash = SHA256Managed.Create().ComputeHash(bytes);

     StringBuilder builder = new StringBuilder();
     for (int i = 0; i < hash.Length; i++)
     {
         builder.Append(hash[i].ToString("X2"));
     }
     return builder.ToString().ToLower(); ;
 }
 /// <summary>
 /// HMAC-SHA256加密
 /// </summary>
 /// <param name="message">加密的字符串</param>
 /// <param name="secret">加密秘钥</param>
 /// <returns></returns>
 public static string HMAC_SHA256(string message, string secret)
 {
     var encoding = new System.Text.UTF8Encoding();
     byte[] keyByte = encoding.GetBytes(secret);
     byte[] messageBytes = encoding.GetBytes(message);
     using (var hmacsha256 = new HMACSHA256(keyByte))
     {
         byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
         StringBuilder builder = new StringBuilder();
         for (int i = 0; i < hashmessage.Length; i++)
         {
             builder.Append(hashmessage[i].ToString("x2"));
         }
         return builder.ToString();
     }
 }
 /// <summary>
 /// HMAC-SHA256加密
 /// </summary>
 /// <param name="message">加密的字符串</param>
 /// <param name="secret">加密秘钥</param>
 /// <returns></returns>
 public static string HMAC_SHA256Base64(string message, string secret)
 {
     var encoding = new System.Text.UTF8Encoding();
     byte[] keyByte = Convert.FromBase64String(secret);
     byte[] messageBytes = encoding.GetBytes(message);
     using (var hmacsha256 = new HMACSHA256(keyByte))
     {
         byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
         StringBuilder builder = new StringBuilder();
         for (int i = 0; i < hashmessage.Length; i++)
         {
             builder.Append(hashmessage[i].ToString("x2"));
         }
         return builder.ToString();
     }
 }
 /// <summary>
 /// RSA公钥加密
 /// </summary>
 /// <param name="content">加密的内容</param>
 /// <param name="publickey">公钥</param>
 /// <returns>加密后的密文</returns>
 public static string RsaEncrypt(string content, string publickey)
 {
     RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
     byte[] cipherbytes;
     rsa.FromXmlString(publickey);
     cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
     return Convert.ToBase64String(cipherbytes);
 }

 /// <summary>
 /// AES加密(加密模式:CBC)模式有多种,可根据实际需求选择,此处列举CBC
 /// </summary>
 /// <param name="toEncrypt">加密字符</param>
 /// <param name="secret">密钥</param>
 /// <returns></returns>
 public static string DHEncrypt(string toEncrypt, string secret)
 {
     byte[] keyArray = UTF8Encoding.UTF8.GetBytes(secret);
     byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
     RijndaelManaged rDel = new RijndaelManaged();
     rDel.Key = keyArray;
//以下4项根据实际需求配置 rDel.Mode = CipherMode.CBC; rDel.Padding = PaddingMode.PKCS7; rDel.BlockSize = 128; rDel.IV = keyArray.Skip(0).Take(16).ToArray();
//以上4项根据实际需求配置
ICryptoTransform cTransform = rDel.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); }

 

2、对Dictionary字典进行ASCII排序

 

 /// <summary>
 /// 对Dictionary字典进行ASCII排序
 /// </summary>
 /// <param name="paramsMap"></param>
 /// <returns></returns>
 public static String getParamSrc(Dictionary<string, string> paramsMap)
 {
     //var vDic = from objDic in paramsMap orderby objDic.Key ascending select objDic;
     var keys = paramsMap.Keys.ToArray();
     Array.Sort(keys, string.CompareOrdinal);
     StringBuilder str = new StringBuilder();
     foreach (var item in keys)
     {
         str.Append(item + "=" + paramsMap[item] + "&");
     }
     //foreach (KeyValuePair<string, string> kv in vDic)
     //{
     //    string pkey = kv.Key;
     //    string pvalue = kv.Value;
     //    str.Append(pkey + "=" + pvalue + "&");
     //}
     String result = str.ToString().Substring(0, str.ToString().Length - 1);
     return result;
 }

 

标签:加密,string,C#,return,result,new,byte,字典
From: https://www.cnblogs.com/zyg316/p/18525080

相关文章

  • chrome语音文本互转
    随着浏览器技术发展,chrome越来越强大。可以实现越来越多的系统级功能,例如:文件操作、剪切板、支付、NFC、通知、WASM、XR(VR、AR)、串口、蓝牙、语音合成、AI等(可参考FUGU项目)在以前想要实现语音文本互转功能,基本都是接入第三方服务(例如讯飞、百度等)。这种方式优点是,提供各种定制化......
  • 详解Rust标准库:VecDeque 队列
    theme:githubhighlight:an-old-hope查看本地官方文档安装rust后运行rustupdoc查看TheStandardLibrary即可获取标准库内容std::connections::VecDeque定义队列是遵循先入先出规则的线性数据结构,在内存中不一定连续VecDeque定义:可增长的环形缓冲区实现的双端队......
  • 安全见闻(3)脚本程序/病毒 (B站泷羽sec
    声明学习视频来自B站UP主泷羽sec,如涉及侵泷羽sec权马上删除文章笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负---------------------------------------------------------------------------------------......
  • HTML CSS JS游戏网页设计作业「响应式高端游戏资讯bootstrap网站」
    ......
  • 《web课程设计》用HTML CSS做一个简洁、漂亮的个人博客网站
    ......
  • python 自动化 excel数据筛选后发送outlook邮件
    importpandasaspdfromdatetimeimportdatetime,timedeltaimportwin32com.clientaswin32importos#导入os模块用于文件删除importglobimportopenpyxl#导入openpyxl模块用于单元格合并和格式化#定义文件路径和工作表名称及起始行file_path='要筛选......
  • Chrome 130 版本新特性& Chrome 130 版本发行说明YN
    Chrome130版本新特性&Chrome130版本发行说明一、Chrome130版本浏览器更新1.新的桌面提示Chrome130引入了一种新的Toast样式,用于在用户操作后提供视觉确认,或快速提供后续操作的途径。当用户执行某个操作时,Toast会在屏幕上短暂弹出,确认操作成功或提供快捷链接。例......
  • clean-code-javascript系列之并发
    使用Promises,不要使用回调回调不够简洁,因为他们会产生过多的嵌套。在ES2015/ES6中,Promises已经是内置的全局类型了,使用它们吧!不好的:require('request').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin',(requestErr,response)=>{if(requestErr......
  • 三周精通FastAPI:31 使用 StaticFiles从目录中自动提供静态文件
    官方文档:静态文件-FastAPI静态文件¶您可以使用 StaticFiles从目录中自动提供静态文件。使用StaticFiles¶导入StaticFiles。"挂载"(Mount)一个 StaticFiles() 实例到一个指定路径。fromfastapiimportFastAPIfromfastapi.staticfilesimportStaticFilesapp......
  • SpringBoot源码解析(二):启动流程之引导上下文DefaultBootstrapContext
    SpringBoot源码系列文章SpringBoot源码解析(一):启动流程之SpringApplication构造方法SpringBoot源码解析(二):启动流程之引导上下文DefaultBootstrapContext目录前言一、入口二、DefaultBootstrapContext1、BootstrapRegistry接口2、BootstrapContext接口3、DefaultBo......