首页 > 编程语言 >C#常见加密方式

C#常见加密方式

时间:2024-02-03 16:13:27浏览次数:26  
标签:加密 string C# 常见 解密 密钥 new 字节

C#常见加密方式

一、MD5

MD5消息摘要算法:一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),

用于确保信息传输完整一致.

简单的说就是单向的加密,即是说无法根据密文推导出明文

MD5主要用途:

1、对一段信息生成信息摘要,该摘要对该信息具有唯一性,可以作为数字签名。

2、用于验证文件的有效性(是否有丢失或损坏的数据),

3、对用户密码的加密,

4、在哈希函数中计算散列值

通过使用MD5加密算法,我们输入一个任意长度的字节串,都会生成一个128位的整数

  public static void Md5(string plaintext)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] palindata = Encoding.Default.GetBytes(plaintext);//将要加密的字符串转换为字节数组
            byte[] encryptdata = md5.ComputeHash(palindata);//将字符串加密后也转换为字符数组
            var a = Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为加密字符串
            Console.Write(a);
        }

二、RSA

在谈RSA加密算法之前,我们需要先了解下两个专业名词,对称加密和非对称加密。

对称加密即:含有一个称为密钥的东西,在消息发送前使用密钥对消息进行加密,在对方收到消息之后,使用相同的密钥进行解密

非对称加密即:加密和解密使用不同的密钥的一类加密算法。这类加密算法通常有两个密钥A和B,

使用密钥A加密数据得到的密文,只有密钥B可以进行解密操作(即使密钥A也无法解密),

相反,使用了密钥B加密数据得到的密文,只有密钥A可以解密。这两个密钥分别称为私钥和公钥,

顾名思义,私钥就是你个人保留,不能公开的密钥,而公钥则是公开给加解密操作的另一方的。

根据不同用途,对数据进行加密所使用的密钥也不相同(有时用公钥加密,私钥解密;有时相反用私钥加密,公钥解密)。

非对称加密的代表算法是RSA算法。

  //加密
        private static string RSAEncryption(string express)
        {
            CspParameters param = new CspParameters();
            param.KeyContainerName = "oa_erp_dowork";//密匙容器的名称,保持加密解密一致才能解密成功
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
            {
                byte[] plaindata = Encoding.Default.GetBytes(express);//将要加密的字符串转换为字节数组
                byte[] encryptdata = rsa.Encrypt(plaindata, false);//将加密后的字节数据转换为新的加密字节数组
                return Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为字符串
            }
        }

        //解密
        private static string RSADecrypt(string ciphertext)
        {
            CspParameters param = new CspParameters();
            param.KeyContainerName = "oa_erp_dowork";
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
            {
                byte[] encryptdata = Convert.FromBase64String(ciphertext);
                byte[] decryptdata = rsa.Decrypt(encryptdata, false);
                return Encoding.Default.GetString(decryptdata);
            }
        }

三、DES

DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。

明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,

使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

DES加密解密的过程主要有四个参数参与其中:明文、密钥、向量、加密结果。

他们之间的关系很好理解,加密过程是这样的,加密结果=明文+密钥+向量,反之也是一样的。

值得注意的是密钥和向量字符串长度必须为8.

//加密
        private static string DESEncrypt(string e)
        {
            byte[] buffer;
   
            DESCryptoServiceProvider DesCSP = new DESCryptoServiceProvider();
            DesCSP.Key = ASCIIEncoding.ASCII.GetBytes("12345678");// 密匙字符串长度必须是8
            DesCSP.IV = ASCIIEncoding.ASCII.GetBytes("12345678");// 初始化向量
            MemoryStream ms = new MemoryStream();//先创建 一个内存流
            CryptoStream cryStream = new CryptoStream(ms, DesCSP.CreateEncryptor(), CryptoStreamMode.Write);//将内存流连接到加密转换流
            StreamWriter sw = new StreamWriter(cryStream);
            sw.WriteLine(e);//将要加密的字符串写入加密转换流
            sw.Close();
            cryStream.Close();
            buffer = ms.ToArray();//将加密后的流转换为字节数组
            return Convert.ToBase64String(buffer);//将加密后的字节数组转换为字符串
        }
        //解密
        private static string DESDecrypt(string e)
        {
            string a = null;
            try
            {
                byte[] buffer = Convert.FromBase64String(e); ;
                DESCryptoServiceProvider DesCSP = new DESCryptoServiceProvider();
                DesCSP.Key = ASCIIEncoding.ASCII.GetBytes("12345678");// 密匙
                DesCSP.IV = ASCIIEncoding.ASCII.GetBytes("12345678");// 初始化向量
                MemoryStream ms = new MemoryStream(buffer);//将加密后的字节数据加入内存流中
                CryptoStream cryStream = new CryptoStream(ms, DesCSP.CreateDecryptor(), CryptoStreamMode.Read);//内存流连接到解密流中
                StreamReader sr = new StreamReader(cryStream);
                a = sr.ReadToEnd();//将解密流读取为字符串
                sr.Close();
                cryStream.Close();
                ms.Close();
   
            }
            catch (Exception ex)
            {

                var ea = ex.Message;
            }
            return a;
        }

四、AES

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,

是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,加密速度快,内存消耗少,安全性较DES更优。

AES是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,

并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,

对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。

      /// <summary>
        /// 
        /// </summary>
        /// <param name="str"></param>
        /// <param name="key">16个字节128位,支持128,192,256</param>
        /// <returns></returns>
        public static string AesEncrypt(string str, string key)
        {
            if (string.IsNullOrEmpty(str)) return null;
            Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);

            RijndaelManaged rm = new RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                Mode = CipherMode.ECB,
                Padding = PaddingMode.PKCS7
            };

            ICryptoTransform cTransform = rm.CreateEncryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            return Convert.ToBase64String(resultArray);
        }

        public static string AesDecrypt(string str, string key)
        {
            if (string.IsNullOrEmpty(str)) return null;
            Byte[] toEncryptArray = Convert.FromBase64String(str);

            RijndaelManaged rm = new RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                Mode = CipherMode.ECB,
                Padding = PaddingMode.PKCS7
            };

            ICryptoTransform cTransform = rm.CreateDecryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return Encoding.UTF8.GetString(resultArray);
        }

标签:加密,string,C#,常见,解密,密钥,new,字节
From: https://www.cnblogs.com/nuomibaibai/p/18004872

相关文章

  • C#路径中使用斜杠/和反斜杠\的区别
    C#路径中使用斜杠/和反斜杠\的区别C#代码中使用图片、视频、.doc、.xls等文件时都要先获得文件路径,但是有的路径用斜杠/作为分隔符,有的路径用反斜杠\作为分隔符,搞得我有点蒙圈,查阅了一些资料后终于弄清楚使用斜杠/和反斜杠\的区别是什么。Unix使用斜杠/作为路径分隔符,而Web应用......
  • C# Winform窗体里面怎么打开exe程序
    C#Winform窗体里面怎么打开exe程序System.Diagnostics.Processprocess=newSystem.Diagnostics.Process();process.StartInfo.FileName="要调用的exe名称";process.StartInfo.WorkingDirectory=path//要掉用得exe路径例如:"C:\windows";process.StartInfo.CreateNoWi......
  • C# Sftp操作
    C#Sftp操作SFTP释义-----引自百度百科sftp是SecureFileTransferProtocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp与ftp有着几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至Blogger伺服器的安全方式。其实在SSH软......
  • EasyCVR视频融合平台如何助力执法记录仪高效使用
    旭帆科技的EasyCVR平台可接入的设备除了常见的智能分析网关与摄像头以外,还可通过GB28181协议接入执法记录仪,实现对执法过程的全称监控与录像,并对执法轨迹与路径进行调阅回看。那么,如何做到执法记录仪高效使用呢?由于执法记录仪支持GB28181协议,所以需要使用GB28181注册到EasyCVR......
  • synchronized【如何保证原子性、可见性、有序性】【如何实现原子性 原理解析】【什么
    @TOC转自极客时间如何解决可见性问题?同步原理剖析什么是Monitor?什么是锁优化?......
  • onlyoffice编译和https设置资料
    编译文档:https://helpcenter.onlyoffice.com/installation/docs-community-compile.aspxhttps设置:https://helpcenter.onlyoffice.com/installation/docs-community-https-linux.aspxhttps://blog.csdn.net/u013930899/article/details/134428379......
  • C语言解题||字符串左旋
    题目:实现一个函数,可以左旋字符串中的k个字符。例如:ABCD左旋1个字符得到BCDAABCD左旋2个字符得到CDAB代码实现:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<assert.h>#include<string.h>//除第1个外,全部往前1位,然后原第1个填充至极右voidLeft_reverse(......
  • Rancher管理K8S集群
    Rancher是一个Kubernetes管理工具,让你能在任何地方和任何提供商上部署和运行集群。Rancher可以创建来自Kubernetes托管服务提供商的集群,创建节点并安装Kubernetes,或者导入在任何地方运行的现有Kubernetes集群。Rancher基于Kubernetes添加了新的功能,包括统一所有集群的......
  • 天地伟业接入EasyCVR详细步骤
    EasyCVR可接入的设备很多,今天小编就带大家学一下天地伟业设备如何接入到EasyCVR平台之中。该设备的接入方式主要有以下两种:1、RTSP方式接入:Rtsp规则:rtsp://用户名:密码@ip:port/{通道号}/{码流};主码流示例:rtsp://admin:[email protected]:554/1/1;Onvif地址示例:http://ip账号/onv......
  • 天地伟业接入视频汇聚/云存储平台EasyCVR详细步骤
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的......