加密算法
基础加密算法
对称加密
加密和解密使用相同的密钥。常见算法包括 AES(高级加密标准)、DES(数据加密标准)。优点是加解密速度快,但密钥传输安全性较差。 典型算法:AES、DES、3DES、RC4。 应用场景:加密数据传输(如VPN、TLS)、存储加密等。
非对称加密
使用一对公钥和私钥进行加密和解密。公钥用来加密,私钥用来解密。非对称加密的安全性更高,但加解密速度较慢。 典型算法:RSA、ECC(椭圆曲线加密)、DSA(数字签名算法)。 应用场景:数字签名、SSL/TLS加密、密钥交换等。
哈希函数
哈希函数是一种将任意长度的数据映射为固定长度的值的算法。常用于数据完整性校验和密码存储。 特点:哈希函数是单向的,意味着从哈希值不能还原出原始数据。 常见算法:MD5(已经不安全)、SHA-1(也不再推荐使用)、SHA-256、SHA-3。 应用场景:数据校验(如文件校验和)、数字签名、密码存储(通过加盐加密)等。
加密扩展
混合加密(对称+非对称)
在实际应用中,常常结合对称加密和非对称加密的优点。非对称加密用于安全地交换对称加密的密钥,对称加密用于实际的数据加密。 流程: 使用非对称加密(公钥)加密一个对称加密的密钥(如AES密钥)。 使用对称加密(如AES)加密实际的数据。 接收方先用私钥解密AES密钥,然后使用AES密钥解密数据。
数字签名(Hash+非对称加密)
数字签名用于验证信息的完整性和真实性。通过非对称加密算法,生成数据的哈希值,并用私钥加密哈希值,从而形成数字签名。 应用场景:邮件签名、软件发布、身份认证。 流程: 对数据计算哈希值。 使用发送方的私钥加密哈希值,生成签名。 接收方使用发送方的公钥验证签名。 注:这里使用的非对称加密是为了保证数据的来源可信,所以是使用私钥加密公钥解密,与保证数据安全性的非对称加密相反。
接口签名(Hash+对称加密(可选))
这种签名方式通常用于保证数据传输的完整性和防止篡改,确保请求数据没有被中途修改,同时验证数据来源的合法性。它的原理通常如下: 流程: 拼接参数:根据事先规定的规则,将接口请求的参数(如参数名和参数值)按一定顺序拼接成一个字符串。 生成哈希值:使用哈希算法(如MD5、SHA-256等)对拼接后的字符串进行哈希处理。这个哈希值就是“签名”。 加密签名(可选):有时,为了增强签名的安全性,哈希值可能会与一个私钥或者预共享密钥(如API密钥)结合,进行加密再发送给服务端。这样,即使攻击者知道了签名规则,只要没有私钥,还是无法伪造合法的签名。 服务端验证签名:服务端接收到请求时,也会用相同的拼接规则、哈希算法以及私钥来重新计算签名,并与请求中提供的签名进行比对。如果一致,则表示请求数据没有被篡改且来自合法客户端。 扩展: 基于时间戳的签名:这种签名方式通常会在请求中加入时间戳,防止重放攻击(Replay Attack)。客户端和服务器都需要在请求中加入当前时间戳,并验证时间戳是否合理(通常通过允许的时间差来判定是否是有效请求)。 基于随机数的签名:这种方式通常使用一个随机数(nonce)作为请求的一部分,防止重放攻击。每次请求都会生成一个新的随机数,与其他请求的签名不同,即使请求参数相同,签名也会不同。 基于HTTP头的签名:在某些情况下,签名信息可以放在 HTTP 请求头中,而不是在 URL 或请求体中。这种方式可以保证敏感信息不会暴露在 URL 中(尤其对于 GET 请求),增强了安全性。
其他
证书与SSL/TLS SSL(安全套接层)/TLS(传输层安全协议)用于在网络上加密数据传输,确保数据的机密性和完整性。 证书:SSL/TLS使用数字证书(通常是由证书颁发机构CA签发的)来验证服务器和客户端的身份,确保通信的安全。 应用场景:HTTPS协议、VPN、电子邮件加密等。 密钥管理 密钥管理是加解密系统中的一个重要方面。密钥的生成、存储、分发和销毁都需要采取严格的措施,防止密钥泄漏或被滥用。 密钥存储:通常使用硬件安全模块(HSM)或专门的密钥管理服务来存储密钥。 密钥交换:如Diffie-Hellman密钥交换协议,用于在不安全的信道中安全地交换密钥。 加密算法的安全性 密钥长度:加密的强度通常与密钥长度成正比。例如,AES-128与AES-256相比,前者的安全性较低。随着计算机性能的提升,较短的密钥长度可能会被暴力破解。 算法的选择:应选择已被广泛审计且没有已知弱点的算法。使用过时或不安全的算法(如MD5、SHA-1)可能会导致安全漏洞。 常见应用和协议 HTTPS(HyperText Transfer Protocol Secure):HTTP协议与TLS/SSL结合,确保Web通信的机密性和完整性。 IPSec:用于在网络层提供加密服务,广泛应用于VPN中。 PGP:一种用于加密电子邮件的标准。 SSH:用于远程登录和文件传输的协议,提供数据加密和认证功能。
问题
1.说出你知道的加密算法 2.你们项目中用到的加密算法有哪些 3.说说接口签名流程