C#开发中常用的加密解密方法
<p><strong>相信很多人在开发过程中经常会遇到需要对一些重要的信息进行加密处理,今天给大家分享我个人总结的一些加密算法:</strong></p><p>常见的加密方式分为可逆和不可逆两种方式</p>
<p> 可逆:RSA,AES,DES等</p>
<p> 不可逆:常见的MD5,SHAD等</p>
<h3><strong>一、MD5消息摘要算法</strong></h3>
<p>我想这是大家都常听过的算法,可能也用的比较多。那么什么是MD5算法呢?MD5全称是message-digest algorithm 5,简单的<span style="color: rgba(0, 51, 0, 1)">说就是<strong>单向的加密,</strong>也就是说<strong>无法根据密文推导出明文。</strong></span></p>
<p><strong>MD5主要用途:</strong></p>
<p>1、对一段信息生成信息摘要,该摘要对该信息具有唯一性,可以作为数字签名</p>
<p>2、用于验证文件的有效性(是否有丢失或损坏的数据)</p>
<p>3、对用户密码的加密</p>
<p>4、在哈希函数中计算散列值</p>
<p>从上边的主要用途中我们看到,由于算法的某些不可逆特征,在加密应用上有较好的安全性。通过使用MD5加密算法,我们输入一个任意长度的字节串,都会生成一个128位的整数。所以根据这一点MD5被广泛的用作密码加密。下面我就像大家演示一下怎样进行密码加密。</p>
<p>首先需要引入命名空间,先看一个比较简单的MD5加密的例子:</p>
<p>using System.Security;</p>
<p>using System.Security.Cryptography;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> ToMD5(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> strs) <br>{
MD5 md5 </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MD5CryptoServiceProvider();
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] bytes = Encoding.Default.GetBytes(strs);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将要加密的字符串转换为字节数组</span>
<span style="color: rgba(0, 0, 255, 1)">byte</span>[] encryptdata = md5.ComputeHash(bytes);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将字符串加密后也转换为字符数组</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> Convert.ToBase64String(encryptdata);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将加密后的字节数组转换为加密字符串</span>
}</pre>
</div>
<p>这里我们需要注意的是,不论是在加密的过程中,加密前要将加密字符串转为字节数组,加密后也要生成密文的字节数据,然后再转化为密文。</p>
<p>下面是关于MD5加密的其他形式,可以根据需求编写你们自己需要的加密算法:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 创建哈希字符串适用于任何 MD5 哈希函数 (在任何平台) 上创建 32 个字符的十六进制格式哈希字符串
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="source"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Get32MD5One(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> source)
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (System.Security.Cryptography.MD5 md5Hash =<span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.MD5.Create())
{
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] data =<span style="color: rgba(0, 0, 0, 1)"> md5Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(source));
System.Text.StringBuilder sBuilder </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Text.StringBuilder();
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = <span style="color: rgba(128, 0, 128, 1)">0</span>; i < data.Length; i++<span style="color: rgba(0, 0, 0, 1)">)
{
sBuilder.Append(data.ToString(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">x2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
}
</span><span style="color: rgba(0, 0, 255, 1)">string</span> hash =<span style="color: rgba(0, 0, 0, 1)"> sBuilder.ToString();
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> hash.ToUpper();
}
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 获取16位md5加密
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="source"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Get16MD5One(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> source)
{
</span><span style="color: rgba(0, 0, 255, 1)">using</span> (System.Security.Cryptography.MD5 md5Hash =<span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.MD5.Create())
{
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] data =<span style="color: rgba(0, 0, 0, 1)"> md5Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(source));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">转换成字符串,并取9到25位</span>
<span style="color: rgba(0, 0, 255, 1)">string</span> sBuilder = BitConverter.ToString(data, <span style="color: rgba(128, 0, 128, 1)">4</span>, <span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉</span>
sBuilder = sBuilder.Replace(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">-</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> sBuilder.ToString().ToUpper();
}
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)">/ </span><span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="strSource"></span><span style="color: rgba(0, 128, 0, 1)">需要加密的明文</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></span><span style="color: rgba(0, 128, 0, 1)">返回32位加密结果,该结果取32位加密结果的第9位到25位</span><span style="color: rgba(128, 128, 128, 1)"></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Get32MD5Two(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> source)
{
System.Security.Cryptography.MD5 md5 </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.MD5CryptoServiceProvider();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取密文字节数组</span>
<span style="color: rgba(0, 0, 255, 1)">byte</span>[] bytResult =<span style="color: rgba(0, 0, 0, 1)"> md5.ComputeHash(System.Text.Encoding.Default.GetBytes(source));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">转换成字符串,32位</span>
<span style="color: rgba(0, 0, 255, 1)">string</span> strResult =<span style="color: rgba(0, 0, 0, 1)"> BitConverter.ToString(bytResult);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉</span>
strResult = strResult.Replace(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">-</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> strResult.ToUpper();
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)">/ </span><span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="strSource"></span><span style="color: rgba(0, 128, 0, 1)">需要加密的明文</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></span><span style="color: rgba(0, 128, 0, 1)">返回16位加密结果,该结果取32位加密结果的第9位到25位</span><span style="color: rgba(128, 128, 128, 1)"></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Get16MD5Two(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> source)
{
System.Security.Cryptography.MD5 md5 </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.MD5CryptoServiceProvider();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取密文字节数组</span>
<span style="color: rgba(0, 0, 255, 1)">byte</span>[] bytResult =<span style="color: rgba(0, 0, 0, 1)"> md5.ComputeHash(System.Text.Encoding.Default.GetBytes(source));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">转换成字符串,并取9到25位</span>
<span style="color: rgba(0, 0, 255, 1)">string</span> strResult = BitConverter.ToString(bytResult, <span style="color: rgba(128, 0, 128, 1)">4</span>, <span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉</span>
strResult = strResult.Replace(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">-</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> strResult.ToUpper();
}</span></pre>
</div>
<h3><strong>二、DES加密</strong></h3>
<p>DES加密算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。</p>
<p>DES,全称Data Encryption Standard,是一种对称加密算法。由于其安全性比较高(有限时间内,没有一种加密方法可以说是100%安全),很可能是最广泛的密钥系统(我们公司也在用,估计你们也有在用....),唯一一种方法可以破解该算法,那就是穷举法。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> DES加密
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="data"></span><span style="color: rgba(0, 128, 0, 1)">加密数据</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="key"></span><span style="color: rgba(0, 128, 0, 1)">8位字符的密钥字符串</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="iv"></span><span style="color: rgba(0, 128, 0, 1)">8位字符的初始化向量字符串</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> DESEncrypt(<span style="color: rgba(0, 0, 255, 1)">string</span> data, <span style="color: rgba(0, 0, 255, 1)">string</span> key, <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> iv)
{
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] byKey =<span style="color: rgba(0, 0, 0, 1)"> System.Text.ASCIIEncoding.ASCII.GetBytes(key);
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] byIV =<span style="color: rgba(0, 0, 0, 1)"> System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
DESCryptoServiceProvider cryptoProvider </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DESCryptoServiceProvider();
</span><span style="color: rgba(0, 0, 255, 1)">int</span> i =<span style="color: rgba(0, 0, 0, 1)"> cryptoProvider.KeySize;
MemoryStream ms </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MemoryStream();
CryptoStream cst </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
StreamWriter sw </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StreamWriter(cst);
sw.Write(data);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
</span><span style="color: rgba(0, 0, 255, 1)">return</span> Convert.ToBase64String(ms.GetBuffer(), <span style="color: rgba(128, 0, 128, 1)">0</span>, (<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)">)ms.Length);
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> DES解密
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="data"></span><span style="color: rgba(0, 128, 0, 1)">解密数据</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="key"></span><span style="color: rgba(0, 128, 0, 1)">8位字符的密钥字符串(需要和加密时相同)</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="iv"></span><span style="color: rgba(0, 128, 0, 1)">8位字符的初始化向量字符串(需要和加密时相同)</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> DESDecrypt(<span style="color: rgba(0, 0, 255, 1)">string</span> data, <span style="color: rgba(0, 0, 255, 1)">string</span> key, <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> iv)
{
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] byKey =<span style="color: rgba(0, 0, 0, 1)"> System.Text.ASCIIEncoding.ASCII.GetBytes(key);
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] byIV =<span style="color: rgba(0, 0, 0, 1)"> System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
</span><span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[] byEnc;
</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
{
byEnc </span>=<span style="color: rgba(0, 0, 0, 1)"> Convert.FromBase64String(data);
}
</span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
}
DESCryptoServiceProvider cryptoProvider </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DESCryptoServiceProvider();
MemoryStream ms </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MemoryStream(byEnc);
CryptoStream cst </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
StreamReader sr </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StreamReader(cst);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> sr.ReadToEnd();
}</span></pre>
</div>
<p>此外还有AES加密算法,但是AES加密是一个新的可以用于保护电子数据的加密算法。其产生的密码是迭代对称的分组密码,代加密使用一个循环结构,在该循环中重复置换和替换输入数据。</p>
<h3>三、<strong>RSA加密算法</strong></h3>
<p>在谈RSA加密算法之前,我们需要先了解下两个专业名词,对称加密和非对称加密。</p>
<p>对称加密即:含有一个称为密钥的东西,在消息发送前使用密钥对消息进行加密,在对方收到消息之后,使用相同的密钥进行解密</p>
<p>非对称加密即:加密和解密使用不同的密钥的一类加密算法。这类加密算法通常有两个密钥A和B,使用密钥A加密数据得到的密文,只有密钥B可以进行解密操作(即使密钥A也无法解密),相反,使用了密钥B加密数据得到的密文,只有密钥A可以解密。这两个密钥分别称为私钥和公钥,顾名思义,私钥就是你个人保留,不能公开的密钥,而公钥则是公开给加解密操作的另一方的。根据不同用途,对数据进行加密所使用的密钥也不相同(有时用公钥加密,私钥解密;有时相反用私钥加密,公钥解密)。非对称加密的代表算法是RSA算法。</p>
<p>了解了这两个名词下面来讲,RSA加密算法。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,多用于数据加密和数字签名。虽然有这么大的影响力,但是同时它也有一些弊端,它产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密,分组长度太大等。</p>
<p>下面通过示例演示使用RSA加密、解密,引用名称空间<code class="csharp plain">System.Security.Cryptography;</code></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> RSA加密数据
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="express"></span><span style="color: rgba(0, 128, 0, 1)">要加密数据</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="KeyContainerName"></span><span style="color: rgba(0, 128, 0, 1)">密匙容器的名称</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> RSAEncryption(<span style="color: rgba(0, 0, 255, 1)">string</span> express, <span style="color: rgba(0, 0, 255, 1)">string</span> KeyContainerName = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">)
{
System.Security.Cryptography.CspParameters param </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.CspParameters();
param.KeyContainerName </span>= KeyContainerName ?? <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zhiqiang</span><span style="color: rgba(128, 0, 0, 1)">"</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">密匙容器的名称,保持加密解密一致才能解密成功</span>
<span style="color: rgba(0, 0, 255, 1)">using</span> (System.Security.Cryptography.RSACryptoServiceProvider rsa = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.RSACryptoServiceProvider(param))
{
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] plaindata = System.Text.Encoding.Default.GetBytes(express);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将要加密的字符串转换为字节数组</span>
<span style="color: rgba(0, 0, 255, 1)">byte</span>[] encryptdata = rsa.Encrypt(plaindata, <span style="color: rgba(0, 0, 255, 1)">false</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将加密后的字节数据转换为新的加密字节数组</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> Convert.ToBase64String(encryptdata);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将加密后的字节数组转换为字符串</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> RSA解密数据
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="express"></span><span style="color: rgba(0, 128, 0, 1)">要解密数据</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="KeyContainerName"></span><span style="color: rgba(0, 128, 0, 1)">密匙容器的名称</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> RSADecrypt(<span style="color: rgba(0, 0, 255, 1)">string</span> ciphertext, <span style="color: rgba(0, 0, 255, 1)">string</span> KeyContainerName = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">)
{
System.Security.Cryptography.CspParameters param </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.CspParameters();
param.KeyContainerName </span>= KeyContainerName ?? <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">zhiqiang</span><span style="color: rgba(128, 0, 0, 1)">"</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">密匙容器的名称,保持加密解密一致才能解密成功</span>
<span style="color: rgba(0, 0, 255, 1)">using</span> (System.Security.Cryptography.RSACryptoServiceProvider rsa = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.RSACryptoServiceProvider(param))
{
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] encryptdata =<span style="color: rgba(0, 0, 0, 1)"> Convert.FromBase64String(ciphertext);
</span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] decryptdata = rsa.Decrypt(encryptdata, <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> System.Text.Encoding.Default.GetString(decryptdata);
}
}</span></pre>
</div>
<p><strong>四、Base64编码</strong></p>
<p>这个就不做过多解释了,直接上代码。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">#region</span> Base64加密解密
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Base64加密
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="input"></span><span style="color: rgba(0, 128, 0, 1)">需要加密的字符串</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Base64Encrypt(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> input)
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> Base64Encrypt(input, <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> UTF8Encoding());
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Base64加密
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="input"></span><span style="color: rgba(0, 128, 0, 1)">需要加密的字符串</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="encode"></span><span style="color: rgba(0, 128, 0, 1)">字符编码</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Base64Encrypt(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> input, Encoding encode)
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Convert.ToBase64String(encode.GetBytes(input));
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Base64解密
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="input"></span><span style="color: rgba(0, 128, 0, 1)">需要解密的字符串</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Base64Decrypt(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> input)
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> Base64Decrypt(input, <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> UTF8Encoding());
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Base64解密
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="input"></span><span style="color: rgba(0, 128, 0, 1)">需要解密的字符串</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="encode"></span><span style="color: rgba(0, 128, 0, 1)">字符的编码</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Base64Decrypt(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> input, Encoding encode)
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> encode.GetString(Convert.FromBase64String(input));
}
</span><span style="color: rgba(0, 0, 255, 1)">#endregion</span></pre>
</div>
<h3><strong>五、SHA安全散列算法</strong></h3>
<p> SHA,全称SecureHashAlgorithm,是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。</p>
<p>下面贴SHA各种加密算法代码:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">SHA为不可逆加密方式</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> SHA1Encrypt(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> Txt)
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> bytes =<span style="color: rgba(0, 0, 0, 1)"> System.Text.Encoding.Default.GetBytes(Txt);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> SHA = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.SHA1CryptoServiceProvider();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> encryptbytes =<span style="color: rgba(0, 0, 0, 1)"> SHA.ComputeHash(bytes);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Convert.ToBase64String(encryptbytes);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> SHA256Encrypt(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> Txt)
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> bytes =<span style="color: rgba(0, 0, 0, 1)"> System.Text.Encoding.Default.GetBytes(Txt);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> SHA256 = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.SHA256CryptoServiceProvider();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> encryptbytes =<span style="color: rgba(0, 0, 0, 1)"> SHA256.ComputeHash(bytes);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Convert.ToBase64String(encryptbytes);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">string</span> SHA384Encrypt(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> Txt)
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> bytes =<span style="color: rgba(0, 0, 0, 1)"> System.Text.Encoding.Default.GetBytes(Txt);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> SHA384 = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.SHA384CryptoServiceProvider();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> encryptbytes =<span style="color: rgba(0, 0, 0, 1)"> SHA384.ComputeHash(bytes);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Convert.ToBase64String(encryptbytes);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> SHA512Encrypt(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> Txt)
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> bytes =<span style="color: rgba(0, 0, 0, 1)"> System.Text.Encoding.Default.GetBytes(Txt);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> SHA512 = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> System.Security.Cryptography.SHA512CryptoServiceProvider();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> encryptbytes =<span style="color: rgba(0, 0, 0, 1)"> SHA512.ComputeHash(bytes);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Convert.ToBase64String(encryptbytes);
}</span></pre>
</div>
<h3>六、AES加密算法 </h3>
<p> AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。</p>
<p>AES 使用几种不同的方法来执行排列和置换运算。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。 <br><br></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)">AES 加密
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="str"></span><span style="color: rgba(0, 128, 0, 1)">明文(待加密)</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="key"></span><span style="color: rgba(0, 128, 0, 1)">密文</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> AesEncrypt(<span style="color: rgba(0, 0, 255, 1)">string</span> str, <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> key)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">string</span>.IsNullOrEmpty(str)) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
Byte[] toEncryptArray </span>=<span style="color: rgba(0, 0, 0, 1)"> Encoding.UTF8.GetBytes(str);
RijndaelManaged rm </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RijndaelManaged
{
Key </span>=<span style="color: rgba(0, 0, 0, 1)"> Encoding.UTF8.GetBytes(key),
Mode </span>=<span style="color: rgba(0, 0, 0, 1)"> CipherMode.ECB,
Padding </span>=<span style="color: rgba(0, 0, 0, 1)"> PaddingMode.PKCS7
};
ICryptoTransform cTransform </span>=<span style="color: rgba(0, 0, 0, 1)"> rm.CreateEncryptor();
Byte[] resultArray </span>= cTransform.TransformFinalBlock(toEncryptArray, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">, toEncryptArray.Length);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Convert.ToBase64String(resultArray);
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)">AES 解密
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="str"></span><span style="color: rgba(0, 128, 0, 1)">明文(待解密)</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="key"></span><span style="color: rgba(0, 128, 0, 1)">密文</span><span style="color: rgba(128, 128, 128, 1)"></param></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><returns></returns></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> AesDecrypt(<span style="color: rgba(0, 0, 255, 1)">string</span> str, <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> key)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">string</span>.IsNullOrEmpty(str)) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
Byte[] toEncryptArray </span>=<span style="color: rgba(0, 0, 0, 1)"> Convert.FromBase64String(str);
RijndaelManaged rm </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> RijndaelManaged
{
Key </span>=<span style="color: rgba(0, 0, 0, 1)"> Encoding.UTF8.GetBytes(key),
Mode </span>=<span style="color: rgba(0, 0, 0, 1)"> CipherMode.ECB,
Padding </span>=<span style="color: rgba(0, 0, 0, 1)"> PaddingMode.PKCS7
};
ICryptoTransform cTransform </span>=<span style="color: rgba(0, 0, 0, 1)"> rm.CreateDecryptor();
Byte[] resultArray </span>= cTransform.TransformFinalBlock(toEncryptArray, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">, toEncryptArray.Length);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Encoding.UTF8.GetString(resultArray);
}</span></pre>
</div>
<p>ok,今天关于C#常见加密算法的分享就到这里了,喜欢的盆友可以帮忙点个推荐,有什么疑问的也欢迎留言指导!!!</p><br><br>
来源:https://www.cnblogs.com/guhuazhen/p/11201450.html
頁:
[1]