ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:26.50KB ,
资源ID:8964572      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8964572.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C#常用的加密解密方法.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C#常用的加密解密方法.docx

1、C#常用的加密解密方法C#常用的加密解密方法开篇C#内置很多加密解密的方法,有MD5,SHA1,base64等。这里会简单介绍下这几个方法以及用法。这几个加密解密会分为两类说,一类是只有加密,没有解密类型的MD5,SHA1。此类加密常用在数据校验。一类是有加密,有解密类型的base64,DES,RSA。此类加密常用在数据传输。数据校验型MD5Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Compute

2、r Science and RSA Data Security Inc. April 1992)。 MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。 p.s.内容来自XX百科。MD5主要是用来做数据校验的。拿网上下载软件来说,有很多软件在下载的时候都会提供一个MD5校验码,就是用来校验软件是否被他人修改过。还有就是用户账号系统,用户注册后,数据库存储

3、的不是明文密码,而是MD5码。测试代码:演示如何获取一个字符串的MD5 hash以及校验MD5 hash:using System;using System.Security.Cryptography;using System.Text;namespace MD5Test class Program static void Main(string args) string source = Happy Birthday!; string hash = GetMd5Hash(source); Console.WriteLine(The MD5 hash of + source + is: + h

4、ash); Console.WriteLine(Verifying the hash .); if (VerifyMd5Hash(source, hash) Console.WriteLine(The hashes are the same.); else Console.WriteLine(The hashes are not same.); Console.ReadKey(); / / 获取一个字符串的32位16进制字符串格式MD5码 / / 原字符串 / static string GetMd5Hash(string input) MD5CryptoServiceProvider md5

5、Hasher = new MD5CryptoServiceProvider(); byte inputBytes = Encoding.Default.GetBytes(input); byte data = md5Hasher.ComputeHash(inputBytes); StringBuilder sBuilder = new StringBuilder(); /将data中的每个字符都转换为16进制的 for (int i = 0; i data.Length; i+) sBuilder.Append(datai.ToString(x2); return sBuilder.ToStr

6、ing(); / / 验证Md5 hash / / 原字符串 / 原字符串的md5码 / static bool VerifyMd5Hash(string input, string hash) string hashOfInput = GetMd5Hash(input); StringComparer comparer = StringComparer.OrdinalIgnoreCase; if (0 = comparer.Compare(hashOfInput, hash) return true; else return false; SHA1 安全哈希算法(Secure Hash Al

7、gorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于264位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,这时候就会产生不同的消息摘要。SHA1有如下特性:不可以从消息摘要中复原信息两个不同的消息不会产生同样的消息摘要,(但会有1x10 48分之一的机率出现相同的消息摘要,一般使用时忽略)。p.s.内容摘自XX百科sha1和md5的用途类似,用来验

8、证数据。测试代码:演示通过sha1获取一个字符串的hash并做验证:using System;using System.Security.Cryptography;using System.Text;namespace SHA1Test class Program static void Main(string args) string source = Happy Birthday!; string hash = GetSha1Hash(source); Console.WriteLine(The SHA1 Hash of + source + is: + hash); Console.Wr

9、iteLine(Verifying the hash.); if (VerifySha1Hash(source, hash) Console.WriteLine(The hashes are the same.); else Console.WriteLine(The Hashes are not same.); Console.ReadKey(); static string GetSha1Hash(string input) byte inputBytes = Encoding.Default.GetBytes(input); SHA1 sha = new SHA1CryptoServic

10、eProvider(); byte result = sha.ComputeHash(inputBytes); StringBuilder sBuilder = new StringBuilder(); for (int i = 0; i result.Length; i+) sBuilder.Append(resulti.ToString(x2); return sBuilder.ToString(); static bool VerifySha1Hash(string input, string hash) string hashOfInput = GetSha1Hash(input);

11、StringComparer comparer = StringComparer.OrdinalIgnoreCase; if (0 = comparer.Compare(hashOfInput, hash) return true; else return false; 加密数据传输这个类型的加密可以解密,主要用来把加密后的数据进行传输,对方收到数据后进行解密。base64Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045RFC2049,上面有MIME的详细规范。Base64编码是从二进制到字符

12、的过程,可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。采用Base64编码具有不可读性,需要解码后才能阅读。p.s.内容摘自XX百科测试代码:using System; using System.Text; namespace Base64Test class Program static void

13、Main(string args) string source = Happy Birthday!; string encryStr = EncryptBase64(source); Console.WriteLine(原数据: + source); Console.WriteLine(加密后的数据: + encryStr);string decryStr = DecryptBase64(encryStr); Console.WriteLine(解密后的数据: + decryStr); Console.ReadKey(); / / base64加密 / / / Static string En

14、cryptBase64(string input) byte inputBytes = Encoding.UTF8.GetBytes(input); return Convert.ToBase64String(inputBytes); / / base64解密 / / / static string DecryptBase64(string input) byte inputBytes = Convert.FromBase64String(input); return Encoding.UTF8.GetString(inputBytes); base64的加密解密规则比较固定,所以破解也容易,

15、在网上找个在线base64解密就可以破解加密后的内容,所以敏感数据不推荐使用base64。DES 对称加密算法 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DSA),已与作为标准的DES区分开来。 P.s.内容摘自XX百科测试代码:using System; using System.IO; using

16、 System.Security.Cryptography; using System.Text; namespace DESTest class Program static void Main(string args) string key = The_key!; string source = Happy Birthday!; Console.WriteLine(Source string: + source); string encryptStr = EncryptDES(source, key); Console.WriteLine(Encrypt string: + encrypt

17、Str);string decryptStr = DecryptDES(encryptStr, key); Console.WriteLine(Decrypt string: + decryptStr); Console.ReadKey(); / /进行DES加密 / / 要加密的字符串 / 密钥,必须为8位 / 以Base64格式返回的加密字符串 static string EncryptDES(string pToEncrypt, string sKey) using (DESCryptoServiceProvider des = new DESCryptoServiceProvider(

18、) byte inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt); des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); System.IO.MemoryStream ms = new System.IO.MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write

19、) cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); cs.Close(); string str = Convert.ToBase64String(ms.ToArray(); ms.Close(); return str; static string DecryptDES(string pToDecrypt, string sKey) byte inputByteArray = Convert.FromBase64String(pToDecrypt); using (DESCryptoServi

20、ceProvider des = new DESCryptoServiceProvider() des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write) cs.Write(inputByteArray, 0, in

21、putByteArray.Length); cs.FlushFinalBlock(); cs.Close(); string str = Encoding.UTF8.GetString(ms.ToArray(); ms.Close(); return str; DES加密解密需要提供一个key,双方可以约定一个共同的key使用。RSA 非对称加密算法 大名鼎鼎的RSA算法 -_-,此处没有介绍,自行XX,Google。 只说明,RSA需要两把key,即密钥,一个public key进行加密,一个private key用来解密。也可称为公钥,私钥。测试代码:演示如何生成公钥,私钥,以及适用公钥加

22、密,私钥解密。using System;using System.Security.Cryptography;using System.Text;namespace RSATest class Program static void Main(string args) try UnicodeEncoding byteConverter = new UnicodeEncoding(); byte dataToEncrypt = byteConverter.GetBytes(Happy Birthday!); byte encryptedData; byte decryptedData; usin

23、g (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider() /数据加密 获取public key信息 /(using RSACryptoServiceProvider.ExportParameters(false) encryptedData = EncryptRSA(dataToEncrypt, rsa.ExportParameters(false), false); /数据解密,获取private key信息 /(using RSACryptoServiceProvider.ExportParameters(true)

24、decryptedData = DecryptRSA(encryptedData, rsa.ExportParameters(true), false); Console.WriteLine(Decrypted String: + byteConverter.GetString(decryptedData); Console.ReadKey(); catch (ArgumentNullException) Console.WriteLine(Encryption failed!); / / 加密数据 / / 要加密的byte数组 / / / static byte EncryptRSA(byt

25、e dataToEncrypt, RSAParameters rsaKeyInfo, bool doOAEPadding) try byte encryptedData; using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider() /导入RSA key信息,这里导入公钥信息 rsa.ImportParameters(rsaKeyInfo); /加密传入的byte数组,并指定OAEP padding /OAEP padding只可用在微软Window xp及以后的系统中 encryptedData = rsa.Encr

26、ypt(dataToEncrypt, doOAEPadding); return encryptedData; catch (CryptographicException e) Console.WriteLine(e.Message); return null; / / 解密数据 / / / / / static byte DecryptRSA(byte dataToDecrypt, RSAParameters rsaKeyInfo, bool doOAEPPadding) try byte decryptedData; using (RSACryptoServiceProvider rsa

27、= new RSACryptoServiceProvider() rsa.ImportParameters(rsaKeyInfo); decryptedData = rsa.Decrypt(dataToDecrypt, doOAEPPadding); return decryptedData; catch (CryptographicException e) Console.WriteLine(e.Message); return null; 使用xml形式的密钥加密解密生成xml格式的密钥 生成的密钥会以xml的格式放在你工程binDebug目录下。 / / 生成RSA public key private key / public static void GenerateRSAKey() RSACryptoServiceProvider rsa = new

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1