.net中C#命名空间System.Security.Cryptography简记

前言

最近在看加密相关的文章,这里做个总结记录,为了以后使用。

System.Security.Cryptography

在.NET Framework出现之前,如果我们需要进行加密的话,我们只有各种较底层的技术可以选择,如Microsoft Crypto APICrypto++Openssl等等,其用法相当复杂。而在 .NET Framework中,这些复杂内容(原来独立的API和SDK)已经被封装合并在一个.NET框架类中,这对于程序开发人员非常有利。它将CryptoAPI改编进.NET的System.Security.Cryptography命名空间,使其包含这些与加密、签名相关的类。利用这些类,我们就可以很方便地使用各种广泛使用的算法,包括RSA, DSA, Rijndael,** SHA和其他Hash算法**等等。,使密码服务摆脱了SDK平台的神秘性,变成了简单的.NET名字空间的使用。

部分名词:

  • 密钥 Secret key
  • 对称加密算法 symmetric cryptography
  • 非对称加密算法 asymmetric cryptography
  • 数字签名 digital signature
  • 证书 certificate
  • 认证授权 certificate
  • 摘要 digest

加密算法

System.Security.Cryptography加密算法主要分为:对称加密算法、非对称加密算法和散列算法(哈希算法)

对称加密算法

对称密钥密码算法所用的加密密钥和解密密钥通常是相同的,即使不同也可以很容易地由其中的任意一个推导出另一个。在此算法中,对密钥的保密性在这类应用中的重中之重!加、解密双方所用的密钥都要保守秘密。由于计算速度快,对称加密算法被广泛应用于大量数据,如文件的加密过程中。
对称加密要注意的地方主要就是块加密模式(这个也不是对称独有的,在非对称中也存在模式概念)!
使用分组密码算法数字签名常用的加密标准有:DESTripl-DESRC2RC4CAST等。
.NET Framework提供了以下类来实现对称加密算法:

  1. System.Security.Cryptography.SymmetricAlgorithm
  2. System.Security.Cryptography.DESDESCryptoServiceProvider
  3. System.Security.Cryptography.RC2RC2CryptoServiceProvider
  4. System.Security.Cryptography.RijndaelRijndaelManaged
  5. System.Security.Cryptography.TripleDESTripleDESCryptoServiceProvider
    包括
DES

DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年
公布把它作为非机要部门使用的数据加密标准。
DES是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密
匙长度是56位(因为每个第8 位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变。其中有极少量的
数被认为是弱密匙,但是很容易避开他们。所以保密性依赖于密钥。

TripleDES

3DES(Triple DES),是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。

AES/Rijndael

2000 年10月,NIST(美国国家标准和技术协会)宣布通过从15种候选算法中选出的一项新的密匙加密标准。Rijndael被选
中成为将来的AES。 Rijndael是在1999年下半年,由研究员Joan Daemen和Vincent Rijmen创建的。美国标准与技术研究
院(NIST)于2002年5月26日制定了新的高级加密标准(AES)规范。AES正日益成为加密各种形式的电子数据的实际标准。
AES 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES使用几种不同的方
法来执行排列和置换运算。AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16
字节)分组加密和解密数据。与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密
码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

RC2

RC2是一个可变密钥大小的分组密码,由Ronald Rivest为RSA数据安全(现在的RSA安全)设计。
“RC”代表“Ron’s Code”或“Rivest’s Cipher”。它比DES更快,被设计为DES的“临时”替代品。通过使用适当的密钥大小,可以使它比DES更安全,也可以使它比DES更不安全。它的块大小为64位,在软件方面比DES快两到三倍。一个名为salt的额外字符串(40到88位长)可用于阻止攻击者试图预先计算可能的加密的大型查找表。salt附加到加密密钥中,这个加长的密钥用于加密消息。然后,不加密的salt与消息一起发送。RC2和RC4已经被想要导出其产品的开发人员广泛使用;对DES出口实行了更严格的条件。

RC4

RC4是由Rivest为RSA数据安全(现在的RSA安全)设计的流密码。它是一个具有面向字节操作的变量键大小的流密码。该算法基于随机排列的使用。
分析表明,密码的周期极有可能大于10100。每个输出字节需要8到16个机器操作,可以预期密码在软件中运行非常快。独立分析人士仔细研究了该算法,认为它是安全的。

代码示例

链接:https://blog.csdn.net/f_957995490/article/details/108446009

非对称加密算法

非对称密钥密码算法又称公共钥匙加密算法,意指加解密的密钥是不一样的,使用到两个密钥:公开密钥和私有密钥,数据加密一个,数据解密一个!即如果用公开密钥对数据进行加密,只有用对应的私有密钥才能进行解密;如果用私有密钥对数据进行加密,则只有用对应的公开密钥才能解密。加密方式的安全性要比对称的安全些,但安全不是绝对的!这种算法最主要运用场景就是数字签名!像RSA/DSA!
使用公钥密码算法进行数字签名通用的加密标准有: RSA,DSA等。
.NET Framework提供了以下类来实现公共钥匙加密算法(非对称加密算法):

  1. System.Security.Cryptography.AsymmetricAlgorithm
  2. System.Security.Cryptography.DSADSACryptoServiceProvider
  3. System.Security.Cryptography.RSARSACryptoServiceProvider
    包括
RSA

1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的
名字以发明者的名字命名:Ron Rivest,AdiShamir和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。
RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全
性,n 至少也要600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术
的发展,这个长度还在增加,不利于数据格式的标准化。

DSA

DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature
Standard)。
DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别
人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却作不到。

代码示例

链接:https://blog.csdn.net/f_957995490/article/details/108447757

加密哈希算法(散列算法)

哈希算法也称作散列算法或报文摘要(digital digest)。哈希算法将任意长度数据转化为固定长度字符序列。简单点就是一种变换,使变换后的数据在一定小概率情况下代表变换前数据的“标签”,这个标签就是散列,变换就是散列算法,往往这些算法是公开的、不可逆的!因为算法公开的,为了防止大家谁都可以对源数据进行散列,所以出现增加一个KEY的变形散列算法(HMAC算法)。哈希结果是始终维一的。任意二个序列的哈希结果是不同的。哈希结果亦称为数字指纹(Finger Print),它有固定的长度,且相同的明文摘要必定一致。这样这串摘要使可成为验证明文是否是"真身"的"指纹"了。
散列主要用在对数据有效性的验证方面。例如,BT就是用SHA1验证收到数据块是否有效的,Email服务器的登录就有一中名为HMACMD5的验证模式!

特点

  1. 算法公开,散列的算法是公开的,也就是说谁都可以通过算法进行输入散列化。
  2. 信息指纹,对相同的输入信息进行散列,得到的结果是一致的(这也是信息指纹的由来)。
  3. 不可逆(将一个已经被散列的输出无法通过计算还原原本的输入)。
    tag:但是现在也有网上通过大数据收集已有的散列,进行库存储,可以通过查库得到原本的输入。
  4. 定长,对不同长度的输入信息进行散列,得到的输出永远是定长的(128个二进制位,32个十六进制字符)。

作用:

  1. 对于用户敏感信息的保密.(比如用户密码)
    tag:把一些不方便明文展示的用户隐私信息通过散列进行密文隐藏,这样被窃取后不会导致隐私泄露。
  2. 搜索引擎
    tag:在搜索引擎中,搜索引擎会进行猜词搜索,就是取搜索词汇中的关键字进行hash匹配,如果匹配结果一致,就显示相应的搜索结果。
  3. 版权维护
    tag:将正版的文件进行hash存储作为正版标识。当有用户进行文件上传时,检测文件的hash值与库中的hash进行匹配,如果不一致,则是侵权行为。
  4. 数字签名
    tag:这在支付领域中用的相当频繁,由于通常网络数据并不小,直接对数据进行RSA加密,这是相当吃性能的行为,那么通常我们就将数据进行hash散列,得到固定的输出数据,再进行加密,这一部分被加密的hash散列数据就是数据的数字签名。通常我们将这个签名信息对原始数据的hash进行匹配识别,以防止数据被篡改。

哈希算法数字签字通用的加密标准有: SHA-1,MD5等。
.NET Framework提供了以下类来实现加密Hash算法:

  1. System.Security.Cryptography.HashAlgorithm
  2. System.Security.Cryptography.HMACSHA1HMACSHA1
  3. System.Security.Cryptography.MACTripleDESMACTripleDES
  4. System.Security.Cryptography.MD5CryptoServiceProviderMD5CryptoServiceProvider
  5. System.Security.Cryptography.SHA1ManagedSHA1Managed
  6. System.Security.Cryptography.SHA256ManagedSHA256Managed
  7. System.Security.Cryptography.SHA384ManagedSHA384Managed
  8. System.Security.Cryptography.SHA512ManagedSHA512Managed
    包括
MD5

MD5即Message-Digest Algorithm 5(信息-摘要算法5),被广泛使用的密码散列函数,是一种用于产生数字签名的单项散列算法,在1991年由MIT
Laboratory for Computer Science(IT计算机科学实验室)和RSA Data Security Inc(RSA数据安全公司)的Ronald L.
Rivest教授开发出来,经由MD2、MD3和MD4发展而来。MD5算法的使用不需要支付任何版权费用。它的作用是让大容量信息在
用数字签名软件签私人密匙前被"压缩"成一种保密的格式(将一个任意长度的“字节串”通过一个不可逆的字符串变换算法
变换成一个128bit(16字节)的大整数,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,
从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。)

SHA-1

SHA-1算法由美国国家标准和技术协会(NIST)与美国国家安全局(NSA)设计,并且被美国政府采纳,成为美国国家标准。
事实上SHA-1目前是全世界使用最为广泛的哈希算法,已经成为业界的事实标准。可以对长度不超过2^64比特的消息进行计
算,输入以512位数据块为单位处理,产生160比特的消息摘要作为输出。

RIPEMD160

RIPEMD-160是一个160位加密哈希函数,由Hans Dobbertin、Antoon Bosselaers和Bart设计
Preneel。它用于安全替换128位哈希函数MD4、MD5和RIPEMD。MD4和MD5是由Ron Rivest为RSA数据安全开发的,RIPEMD是在
欧盟(EU)项目框架成熟的(RIPE:RACE Integrity Primitives Evaluation,1988-1992)。

SHA-256/384/512

哈希值大小为分别256/384/512位。

HMAC

其实HMAC准确的来说并不是一种散列算法,而是一种散列加密方案。通过一个KEY值进行两次散列运算得到输出结果。

代码示例

链接:https://blog.csdn.net/f_957995490/article/details/108466199

参考链接

  1. https://blog.csdn.net/byxdaz/article/details/6741236
  2. http://blog.sina.com.cn/s/blog_537d68210100mzoe.html
  3. https://blog.csdn.net/zfive5/article/details/1428173

官方介绍链接

https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography?redirectedfrom=MSDN&view=netframework-4.8

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天富儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值