Crypto 加密解密
数据转换
进制转换、编码解码、加密解密均属于数据转换的范畴,按照OSI参考模型的定义,均处于表示层。
三者关系模型,仅供参考:原始字符->加密->编码->二进制->解码->解密->原始字符
进制转换
是对2个数字依据不同的表示形式进行转换。例如二进制可以转换成十进制或十六进制。其实质是数字与数字之间的转换。
为什么需要十六进制?
在计算机中,二进制常常用于表示和处理数据,但是在日常生活中,我们更习惯于使用十进制表示数字。如果需要将二进制转换为十进制,我们需要对每一位进行计算,比较繁琐。而将二进制转换为十六进制,则可以将四位二进制数转换为一个十六进制数,计算更加简便,而且转换后的结果也更加简洁。
编码解码
其实质是不同数据格式之间的转换。
- 字符编码:将原始字符(英文字母、数字、特殊字符(控制字符和可显示字符)、世界各国文字)转换成数字的过程。例如ASCII、Unicode、UTF-8等等。其实质是原始字符与数字之间的转换。
- base64编码:便于进行存储和网络传输。其实质是字符与字符串之间的转换。它主要的用途是把一些二进制数转成普通字符用于网络传输,这是因为一些二进制字符在传输协议中属于控制字符,不能直接在网络上传输。
- url编码:便于进行网络传输。其实质是字符与字符串之间的转换。
加密解密
是将明文通过一定的算法转换成不可读的密文,以保证数据的保密性。
编码解码网站
加密解密
Crypto,即加密解密,偏重对数学,算法的深入学习,例如一些常用的密码学算法,如AES、RSA、SHA-256等。
基础数学知识:
-
质数与因数分解:质数是只能被1和本身整除的正整数,而因数分解就是将一个数分解为质数乘积的过程。在RSA算法中,需要使用大质数进行加密和解密,因此理解质数和因数分解的概念非常重要。
-
最大公约数与最小公倍数:最大公约数是指两个或多个数中能够同时整除它们的最大正整数,最小公倍数是指能够同时被两个或多个数整除的最小正整数。在密码学中,最大公约数和最小公倍数经常用于计算模逆元和密钥的选择。
-
模逆元:在RSA算法中,需要计算e的模逆元d,满足(e * d) mod n = 1。理解模逆元的概念和计算方法对于理解RSA算法的实现和应用非常重要。
-
离散对数:离散对数是一种数学运算,表示在一个给定的有限群中,求解a^x ≡ b (mod p)的x的值。在密码学中,离散对数被广泛应用于Diffie-Hellman密钥交换算法和椭圆曲线密码算法。
-
矩阵和线性代数:在某些加密算法中,涉及到矩阵的运算和线性代数的概念。因此,了解基本的矩阵运算和线性代数的概念也有助于理解这些算法的原理和实现。
进阶数学知识:
-
离散数学:离散数学是数学中的一个分支,研究离散结构及其相应的运算规则和算法,是密码学研究的基础之一。
-
线性代数:线性代数是研究向量、矩阵和线性方程组等线性空间的基本性质的数学分支,应用于密码学中的矩阵变换、向量加密等方面。
-
数论:数论是研究整数的性质和结构的数学分支,应用于密码学中的公钥密码算法(如RSA)和离散对数问题等方面。例如欧拉函数、欧拉定理、费马小定理、欧几里得算法、扩展欧几里得算法等。
-
概率论与统计学:概率论和统计学是研究随机现象的概率和统计规律的数学分支,应用于密码学中的伪随机数生成、密钥分发等方面。
-
微积分:微积分是研究变化率和积分的数学分支,应用于密码学中的曲线方程求解和椭圆曲线加密等方面。
现代密码学-非对称加密-RSA算法
RSA是一种非对称加密算法,其名称来源于三位发明者的名字:Ron Rivest, Adi Shamir, Leonard Adleman。它的安全性基于数学问题,即大质数分解问题。RSA算法主要用于数据加密和数字签名。
RSA算法的关键在于生成公钥和私钥。公钥是可以公开的,用于加密数据;私钥只能由密钥持有人保管,用于解密数据或生成数字签名。生成公钥和私钥的过程可以简单地概括为以下几个步骤:
- 选择两个大质数p和q。
- 计算n=p*q,N为两个大质数的乘积。
- 计算r=(p-1)*(q-1),r为欧拉函数值。
- 选择一个大于1且小于r的整数e,使得e与r互质。
- 计算d,使得(e*d) mod r = 1。
在这里,其中公钥由两个数构成,即(n, e),私钥由两个数构成,即(n, d)。数据加密时使用公钥进行加密,解密时使用私钥进行解密。因此,计算d的过程就是在求解e在模n意义下的逆元的过程,可以使用扩展欧几里得算法来计算。
RSA算法的安全性基于质因数分解问题,也就是说,如果攻击者能够快速地分解N成p和q两个大质数,那么就可以推导出私钥,从而解密加密的数据或伪造数字签名。因此,RSA算法的安全性也依赖于p和q的大小,一般要求它们的位数足够大,比如2048位或更多。
常见的秘钥格式
1.DER 格式:DER(Distinguished Encoding Rules)是一种二进制格式的编码规则,常用于表示证书、公钥、私钥等。DER格式的密钥一般使用二进制方式存储,适合在网络传输中使用。
2.PEM 格式:PEM(PrivacyEnhanced Mail)是一种ASCII编码的密钥格式,常用于表示证书、公钥、私钥等。PEM 格式的密钥以"-----BEGIN…."和"-----END…."开头和结尾,中间是Base64 编码的二进制数据。PEM 格式的密钥便于在文本文件中存储和传输但不适合直接在网络上传输。
3.PKCS#12格式:PKCS#12是一种由RSA实验室开发的二进制格式,用于存储证书和私钥等密钥信息。PKCS#12格式的文件通常以.p12或pfx为后缀名,支持密码保护和加密,可用于在不同的系统之间安全地传输和备份密钥信息。
4.JKS格式:JKS(Java KeyStore)是一种由Java语言开发的密钥库格式,用于存储密钥和证书等安全信息。JKS格式的密钥库使用二进制方式存储,可以在Java应用程序中方便地加载和使用。
除了上述常见的密钥格式,还有其他一些格式,如OpenSSL的ENGINE格式、Microsoft的PFX格式等。在使用索钥时,需要根据具
情况选择合适的密钥格式,并遵循相应的编码规则和安全标准。
现代密码学-非对称加密-xxx算法
现代密码学-对称加密-xx算法
DES、AES
Hash算法
md5、sha系列
hash SHA1-256
古典密码学-xxx
古典密码学-xxx
参考资料:https://blog.csdn.net/qq_40837276/article/details/83080460
PKI:CA数字证书
IPsec、SSL是一种安全协议,不是算法。
socket4/socket5
wep WPA2 WPA3
......