常见的加解密(广义)算法
HASH(哈希,散列,摘要)算法
一些特点
- 一致性。Hash 函数可以接受任意大小的数据,并输出固定长度的散列值,同时输出不同值的概率应该尽可能一致。
- 雪崩效应。原始数据哪怕只有一个字节的修改,得到的 hash 值都会发生巨大的变化。
- 单向。只能从原始数据计算得到 hash 值,不能从 hash 值计算得到原始数据。字典
- 避免冲突。几乎不可能找到一个数据和当前计算的这个数据计算出一样的 hash 值。MD5的碰撞概率在2-128
常见算法
md5,sha1,sha256,sha512,crc32
用途
- 数据校验,文件完整性检查,下载软件,快速上传等
- 数据签名, API接口
- ...
对称加密(Symmetric-Key Cryptography)
双方使用同样的密钥(key)进行加密(encrypt)和解密(decrypt)。
常见
- DES
全称为Data Encryption Standard,即数据加密标准。目前已经不推荐使用。
特点:DES是一种将64bit的明文加密成64bit的密文的对称密码算法,它的密钥长度是64bit(每隔7bit会设置一个用于错误检查的bit,因此实际使用密钥长度56bit);分组加密,DES每次只能加密64比特的数据。
- 3DES
3DES,即triple-DES,简单地说就是3次DES加解密的组合。目前已经不推荐使用。 - AES
AES, Advanced Encryption Standard,目前的话对称加密基本都推荐AES。
密钥:128bit、192bit、256bit。
phpseclib
print_r(openssl_get_cipher_methods(1));
ECB模式,全称Electronic CodeBook mode,电子密码本模式。
var_dump(openssl_encrypt('private data', 'aes-128-ecb', 'secret'))
- php中
openssl_decrypt
openssl_encrypt
不对称加密(Public-Key Cryptography)
顾名思义,加密解密使用不同的密钥;
特点
- 私钥保密,公钥公开,私钥可推导出公钥
- 使用私钥加密的数据能用公钥解密,反过来也行;
- 安全性高
常见
- RSA
(Ron Rivest, Adi Shamir, and Leonard Adleman)
是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
- ECC
全称为Elliptic Curves Cryptography,也叫椭圆曲线加密算法,是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。
- 生成密钥对
命令行openssl:openssl genrsa -out private.pem 2048;openssl rsa -in private.pem -pubout -out public.pem
工具:xshell
- PHP中
openssl_public_decrypt
openssl_public_encrypt
openssl_private_decrypt
openssl_private_encrypt
- 应用
- 银行业广泛使用,U盾
- SSL证书,服务端存的是私钥,CSR(包含公钥) 文件要提交给证书颁发机构
- SSH
- API接口,对外接口,公钥的交换比较安全
- 通信,点对点加密等
- 签名
- 投票
- 。。。
- 实例
https,握手阶段用不对称加密来生成会话密钥,会话密钥用于加密和解密 TLS 握手之后的所有通信;
讨论的问题
- encode,decode,比方说base64算不算加解密?
赞助一杯咖啡☕️
本文由 widdy 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Aug 18, 2022 at 09:32 am