iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#如何实现加密与解密
  • 555
分享到

C#如何实现加密与解密

2023-06-30 18:06:26 555人浏览 独家记忆
摘要

这篇文章主要讲解了“C#如何实现加密与解密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现加密与解密”吧!一、Hash加密,使用HashAlGorithm哈希算法类的派生类(MD5

这篇文章主要讲解了“C#如何实现加密与解密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现加密与解密”吧!

    一、Hash加密,使用HashAlGorithm哈希算法类的派生类(MD5、SHA1等)

    特点:只能加密,不可逆。可对目标信息生成一段特定长度唯一的Hash值。

    HashAlgorithm派生类包括:

    • KeyedHashAlgorithm: 显示所有加密哈希算法实现均必须从中派生的抽象类。

    • MD5: 表示 MD5 哈希算法的所有实现均从中继承的抽象类。
      ————MD5CryptoServiceProvider:使用加密服务提供程序 (CSP) 提供的实现,计算输入数据的 MD5 哈希值。

    • RIPEMD160: 表示 MD160 哈希算法的所有实现均从中继承的抽象类。

    • SHA1: 计算输入数据的 SHA1 哈希值。
      ————SHA1CryptoServiceProvider:使用加密服务提供程序 (CSP) 提供的实现,计算输入数据的 SHA1 哈希值。

    • SHA256: 计算输入数据的 SHA256 哈希值。

    • SHA384: 计算输入数据的 SHA384 哈希值。

    • SHA512: 计算输入数据的 SHA512 哈希值。

    1、使用抽象类HashAlgorithm

    //明文密码由字符串转换为byte数组byte[] clearBytes =Encoding.Default.GetBytes("123");//由明文的byte数组计算出MD5密文byte数组byte[] hashedBytes = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);//把byte数组转换为字符串后返回,BitConverter用于将基础数据类型与字节数组相互转换string result = BitConverter.ToString(hashedBytes).Replace("-", "");Console.Write(result);

    2、使用抽象类MD5

    byte[] clearBytes = Encoding.Default.GetBytes("123");byte[] hashedBytes =  MD5.Create().ComputeHash(clearBytes);StringBuilder sBuilder = new StringBuilder();for (int i = 0; i < hashedBytes.Length; i++){    sBuilder.Append(hashedBytes[i].ToString("x2"));}string result = sBuilder.ToString();Console.Write(result);

    3、使用MD5CryptoServiceProvider类

    byte[] clearBytes = Encoding.Default.GetBytes("123");byte[] hashedBytes = new MD5CryptoServiceProvider().ComputeHash(clearBytes);string result = "";for (int i = 0; i < hashedBytes.Length; i++)    result += hashedBytes[i].ToString("X").PadLeft(2, '0');Console.Write(result);

    4、WEB使用的Hash加密:FORMsAuthentication类

    FormAuthentication.HashPassWordForStoringInConfigFile(str,"MD5")//或者“SHA1”

    5、文件哈希计算

    • MD5是一个将任意长度的数据字符串转化成短的固定长度的值的单向操作。任意两个字符串不应有相同的散列值(即,有“很大可能”是不一样的,并且要人为地创造出来两个散列值相同的字符串应该是困难的)。

    • 因此MD5经常用于校验字符串或者文件,因为如果文件的MD5不一样,说明文件内容也是不一样的,即经过修改的,如果发现下载的文件和给的md5值不一样,就需要慎重使用。

    • MD5文件校验用途非常多,例如:游戏patch包的校验,病毒文件确认,app提审校验等等,只要需要确认某一个文件的唯一性和正确性,都会使用md5作为校验。

    输入文件路径,就可以得到对应的哈希值,这个哈希值是对文件本身内容包括文件名字有关,跟文件存放的路径和运行平台,设备无关。

    string GetFileHash(string path){    var hash = MD5.Create();//SHA1.Create();    var stream = new FileStream(path, FileMode.Open);    byte[] hashByte = hash.ComputeHash(stream);    stream.Close();    return BitConverter.ToString(hashByte).Replace("-", "");}

    二、对称加密:使用SymmetricAlgorithm对称算法类的派生类(Aes、DES等)

    特点:指加密和解密使用相同密钥的加密算法。

    对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。

    SymmetricAlgorithm派生类包括:

    • Aes:表示高级加密标准 (AES) 的所有实现都必须从中继承的抽象基类。
      &mdash;&mdash;&mdash;&mdash;AesCryptoServiceProvider:使用高级加密标准 (AES) 算法的加密应用程序编程接口 (Capi) 实现来执行对称加密和解密。

    • DES:表示所有 DES 实现都必须从中派生的数据加密标准 (DES) 算法的基类。
      &mdash;&mdash;&mdash;&mdash;DESCryptoServiceProvider:定义访问数据加密标准 (DES) 算法的加密服务提供程序 (CSP) 版本的包装对象。

    • RC2:表示 RC2 算法的所有实现都必须从中派生的基类。

    • Rijndael:表示 Rijndael 对称加密算法的所有实现必须从其继承的基类。

    • TripleDES:表示三重数据加密标准算法的基类

    public static string strKey = "abcdefgh";//注意:这里的密钥sKey必须能转为8个byte,即输入密钥为8半角个字符或者4个全角字符或者4个汉字的字符串public static string strIV = "ijklmnop";// 加密public static string Encrypt(string _strQ){    byte[] buffer = Encoding.UTF8.GetBytes(_strQ);    MemoryStream ms = new MemoryStream();    DESCryptoServiceProvider des = new DESCryptoServiceProvider();    CryptoStream encStream = new CryptoStream(ms, des.CreateEncryptor(Encoding.UTF8.GetBytes(strKey), Encoding.UTF8.GetBytes(strIV)), CryptoStreamMode.Write);    encStream.Write(buffer, 0, buffer.Length);    encStream.FlushFinalBlock();    return Convert.ToBase64String(ms.ToArray());}// 解密public static string Decrypt(string _strQ){    byte[] buffer = Convert.FromBase64String(_strQ);    MemoryStream ms = new MemoryStream();    DESCryptoServiceProvider des = new DESCryptoServiceProvider();    CryptoStream encStream = new CryptoStream(ms, des.CreateDecryptor(Encoding.UTF8.GetBytes(strKey), Encoding.UTF8.GetBytes(strIV)), CryptoStreamMode.Write);    encStream.Write(buffer, 0, buffer.Length);    encStream.FlushFinalBlock();    return Encoding.UTF8.GetString(ms.ToArray());}

    三、非对称加密:使用AsymmetricAlgorithm非对称算法类的派生类(DSA、RSA等)

    特点:指加密和解密使用不同密钥的加密算法,也称为公私钥加密。公钥是可以公开用来加密,私匙严格由接受方保密用于加密。

    非对称加密的缺点是加解密速度要远远慢于对称加密。

    AsymmetricAlgorithm派生类包括:

    • DSA:表示数字签名算法(DSA)的所有实现都必须从中继承的抽象基类。
      &mdash;&mdash;&mdash;&mdash;DSACryptoServiceProvider:使用加密服务提供程序 (CSP) 提供的 DSA算法的实现执行不对称加密和解密。

    • ECDiffieHellman:

    • ECDsa:

    • RSA:表示 RSA 算法的所有实现均从中继承的基类。
      &mdash;&mdash;&mdash;&mdash;RSACryptoServiceProvider:使用加密服务提供程序 (CSP) 提供的 RSA 算法的实现执行不对称加密和解密。

    /// /// 获取加密所使用的key,RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。/// public static void GeTKEy(){    string PublicKey = string.Empty;    string PrivateKey = string.Empty;    RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();    PublicKey = rSACryptoServiceProvider.ToXmlString(false);    // 获取公匙,用于加密    PrivateKey = rSACryptoServiceProvider.ToXmlString(true);    // 获取公匙和私匙,用于解密    //Console.WriteLine("PublicKey is {0}", PublicKey);        // 输出公匙    //Console.WriteLine("PrivateKey is {0}", PrivateKey);     // 输出密匙    //密匙中含有公匙,公匙是根据密匙进行计算得来的。    using (StreamWriter streamWriter = new StreamWriter("PublicKey.xml"))    {        streamWriter.Write(rSACryptoServiceProvider.ToXmlString(false));// 将公匙保存到运行目录下的PublicKey    }    using (StreamWriter streamWriter = new StreamWriter("PrivateKey.xml"))    {        streamWriter.Write(rSACryptoServiceProvider.ToXmlString(true)); // 将公匙&私匙保存到运行目录下的PrivateKey    }}/// /// 加密/// private static string Encryption(string str){    RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();    using (StreamReader streamReader = new StreamReader("PublicKey.xml")) // 读取运行目录下的PublicKey.xml    {        rSACryptoServiceProvider.FromXmlString(streamReader.ReadToEnd()); // 将公匙载入进RSA实例中    }    byte[] buffer = Encoding.UTF8.GetBytes(str); // 将明文转换为byte[]    // 加密后的数据就是一个byte[] 数组,可以以 文件的形式保存 或 别的形式(网上很多教程,使用Base64进行编码化保存)    byte[] EncryptBuffer = rSACryptoServiceProvider.Encrypt(buffer, false); // 进行加密    return Convert.ToBase64String(EncryptBuffer); // 如果使用base64进行明文化,在解密时 需要再次将base64 转换为byte[]}/// /// 解密/// private static string Decrypt(string strEncryptBase64){    RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();    using (StreamReader streamReader = new StreamReader("PrivateKey.xml")) // 读取运行目录下的PrivateKey.xml    {        rSACryptoServiceProvider.FromXmlString(streamReader.ReadToEnd()); // 将私匙载入进RSA实例中    }    byte[] buffer = Convert.FromBase64String(strEncryptBase64);    // 解密后得到一个byte[] 数组    byte[] DecryptBuffer = rSACryptoServiceProvider.Decrypt(buffer, false); // 进行解密    string str = Encoding.UTF8.GetString(DecryptBuffer); // 将byte[]转换为明文    return str;}

    感谢各位的阅读,以上就是“C#如何实现加密与解密”的内容了,经过本文的学习后,相信大家对C#如何实现加密与解密这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: C#如何实现加密与解密

    本文链接: https://www.lsjlt.com/news/330799.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C#如何实现加密与解密
      这篇文章主要讲解了“C#如何实现加密与解密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现加密与解密”吧!一、Hash加密,使用HashAlgorithm哈希算法类的派生类(MD5...
      99+
      2023-06-30
    • C#实现加密与解密详解
      目录一、Hash加密,使用HashAlgorithm哈希算法类的派生类(MD5、SHA1等)1、使用抽象类HashAlgorithm2、使用抽象类MD53、使用MD5CryptoSe...
      99+
      2024-04-02
    • JavaScript如何实现加密与解密
      这篇“JavaScript如何实现加密与解密”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript如何实现加密与...
      99+
      2023-06-30
    • 如何实现VBS加密与VBE解密
      这篇文章主要介绍了如何实现VBS加密与VBE解密,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。用Script Encoder加密VBS脚本Script Encoder 是一个...
      99+
      2023-06-08
    • 如何理解C#DES加密解密的实现
      这篇文章将为大家详细讲解有关如何理解C#DES加密解密的实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C# DES加密解密的实现,DES算法为密码体制中的对称密码体制,由IBM公司研制的...
      99+
      2023-06-17
    • c语言如何实现DES加密解密
      目录c语言实现DES加密解密C语言DES加密解密的认识以及解密出现乱码的分析Des加密Des加密模式填充方式保证加密解密的一致性 python中的des加密总结c语言实现DES加密解...
      99+
      2023-05-18
      c语言DES c语言加密解密 DES加密解密
    • PHP如何实现加密解密
      这篇文章主要为大家展示了“PHP如何实现加密解密”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP如何实现加密解密”这篇文章吧。加密解密function encrypt($data,...
      99+
      2023-06-03
    • VBS如何实现加密解密
      这篇文章主要为大家展示了“VBS如何实现加密解密”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VBS如何实现加密解密”这篇文章吧。用法: 1.copy下面代码至文本文档 2.将文件后缀名改为.v...
      99+
      2023-06-08
    • python密码加密与解密的实现
      目录一、对称加密1.1 安装第三方库 - PyCrypto1.2 加密实现二、非对称加密三、摘要算法3.1 md5加密3.2 sha1加密3.3 sha256加密3.4 sha384...
      99+
      2023-02-07
      python 密码加密 python 密码解密
    • JavaScript实现加密与解密详解
      目前原生JS貌似并没有提供MD5计算相关的函数方法,只能自己实现或者使用前辈大神写好的。 一、使用crypto.js库进行加密 GitHub的 https://github...
      99+
      2024-04-02
    • RSA如何实现C# 加密
      RSA如何实现C# 加密,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。RSA实现C# 加密首先我们来了解下什么是RSA ,它属于不对称加密,其原理就是使用一个公...
      99+
      2023-06-17
    • c++如何实现md5加密
      本文小编为大家详细介绍“c++如何实现md5加密”,内容详细,步骤清晰,细节处理妥当,希望这篇“c++如何实现md5加密”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。头文件定义#ifndef __MD5...
      99+
      2023-07-02
    • C#实现简单的文件加密与解密方式
      目录C#实现文件加密与解密C#进行url加密解密与jquery前端加密解密C#进行url加密与解密jquery总结C#实现文件加密与解密 代码: static class Handl...
      99+
      2023-01-28
      C#文件加密 C#文件解密 C#文件加密解密方式
    • python如何实现凯撒密码加密解密
      这篇文章主要介绍了python如何实现凯撒密码加密解密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python如何实现凯撒密码加密解密文章都会有所收获,下面我们一起来看看吧。凯撒加密就是通过将字母移动一定的位...
      99+
      2023-07-02
    • PHP 程序如何实现加密解密?
      PHP 中有很多加密和解密的函数可用,以下是一些常用的加密解密方式和函数: 对称加密: 对称加密是一种加密方式,使用同一个密钥加密和解密数据。PHP 中可用的对称加密算法包括 AES、DES、3DES 等。以下是一些常用的对称加密函数:...
      99+
      2023-10-02
      加密 php Powered by 金山文档
    • python基于crypto实现加密与解密
      1.安装crypto库 pip install pycryptodome ps: 使用pip工具安装步骤: 1、直接安装pycryptodome模块即可 pip install pycryptodom...
      99+
      2023-10-10
      python 开发语言
    • 如何分析C# 加密中MD5和SHA1加密实现
      如何分析C# 加密中MD5和SHA1加密实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。对于C# 加密的认识,在C# 中可以很方便地进行MD5 和SHA1 加...
      99+
      2023-06-17
    • VBS脚本如何实现加密/解密
      这篇文章主要为大家展示了“VBS脚本如何实现加密/解密”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VBS脚本如何实现加密/解密”这篇文章吧。Dim WshSHell,FSO ...
      99+
      2023-06-08
    • java项目中如何实现数据的加密与解密
      java项目中如何实现数据的加密与解密?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  这是一个关于密钥查询的jsp文件,接受上级文件的数据并加密处理,放入Map集合...
      99+
      2023-05-31
      java 加密 解密
    • Java如何实现Excel文件加密解密
      本文小编为大家详细介绍“Java如何实现Excel文件加密解密”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现Excel文件加密解密”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。概述设置excel...
      99+
      2023-06-30
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作