常用加密算法学习

时间:2022-09-08 19:08:08

1.加密分类

对称加密

早期的加密类型,安全性较低。大体有:DES,DES3(或者叫做3DES),AES,RC2等

  • DES相对时间最久,因为1977年被美国*正式采纳,所以具体时间可以追溯到1977年以前
  • AES加密于1998年提出,广泛使用大概在2006年左右。像路由器就经常采用该种加密方式

.Net中对应的命名空间为:(部分)

AES: System.Security.Cryptography.AesCryptoServiceProvider

DES: System.Security.Cryptography.DESCryptoServiceProvider

RC2: System.Security.Cryptography.RC2CryptoServiceProvider

RijndaelManaged: System.Security.Cryptography.RijndaelManaged

非对称加密

加密和解密时使用不同密钥,分为公钥和私钥。这样即使别人破解了密文但不知道私钥也就无法修改。大体有:DSA,RSA,D-H,ECDH(椭圆曲线)等

  • RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
  • DSA一般用于数字签名
  • ECDH资料比较少,但似乎它的加密性相对最高

.Net中对应的命名空间为:(部分)

DSA: System.Security.Cryptography.DSA

RSA: System.Security.Cryptography.RSA

ECDH: System.Security.Cryptography.ECDiffieHellman

2.常用算法的使用介绍

具体加解密包来源于网络,可以基于.NET自身的进行完善。这里只介绍使用

2.1 AES

密钥长度为128/192/256位

初始化向量16个字节,key用32个字节

测试:

密文
"hellow world"
密钥
new string('h', 32)


加密结果:
39,249,2,51,67,184,116,198,8,184,38,78,63,214,223,196

解密:
hellow world
 

2.2 DES

Key和初始化向量都用8个字节

密文
"hellow world"
密钥
new string('h', 8)


加密结果:
236,32,72,25,145,219,140,175,102,86,40,208,86,65,144,154

解密:
hellow world

2.3 DES3

用法和DES一样,这里略过

2.4 RSA(非对称)

密文
"hellow world"
密钥
N/A(公钥,私钥均不使用OAEP填充的情况)


加密结果:
188,230,28,149,191,101,249,129,182,43,49,69,188,183,253,13,157,55,121,114,10,87,
244,158,38,213,31,128,221,213,182,65,179,131,186,94,73,165,161,5,61,163,60,217,5
8,113,211,143,186,86,127,96,247,155,10,16,200,163,193,150,80,111,152,163,156,131
,191,169,251,27,225,101,99,16,201,252,215,252,68,101,171,245,60,185,8,74,105,117
,79,200,100,80,180,40,135,129,44,26,18,3,190,37,241,225,172,133,197,206,37,198,8
8,89,205,167,186,21,216,135,202,190,184,88,32,194,210,85,212,231

解密:
hellow world