php 前后端 不对称加密,前后端都在用的加解密技术

# 介绍

数字签名、信息加密在前后端开发是经常用的的技术,主要的应用场景比如:用户登录、交易、信息通信、认证等。不同的应用场景可能会选择不同的签名加密算法,下面给大家介绍几种比较常用的签名加密算法。

# AES

高级加密标准(AES,Advanced Encryption Standard)是最常见的对称加密算法比如:微信小程序加密传输就是用这个加密算法的。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:

5eb9f811ca90b858fbd8c25c60ad063c.png

# RSA

RSA加密算法是一种典型的非对称加密算法,是应用最广泛的非对称加密算法。

非对称加密算法是通过两个密钥(公钥、私钥)来实现对数据的加密和解密。公钥用于加密、私钥用于解密。

非对称解密算法流程图

ea823f9beaf9c8a4fcb46d4dc5833fd0.png

RSA加密算法流程和加密过程图

cc3b034ed62a4d9abe60a80c28ff9438.png

# CRC

循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。 它是利用除法及余数的原理来作错误侦测的。

# MD5

MD5出现最多的是在文件签名中,我们下载文件的时候,经常会看到文件页面上附带一个扩展名为.MD5 的文本或者一行字符,这行字符就是就是把整个文件当作原数据通过 MD5计算后的值。我们下载文件后,可以用检查文件MD5信息的软件对下载到的文件在进行一次计算。两次结果对比就可以确保下载到文件的准确性。

还有常用的是网站比较敏感信息的加密,比如用户密码、支付签名等。

# SHA1算法

SHA1是和 MD5 一样流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1会产生一个 160` 位的消息摘要。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性以及数字签名 等场景。

# DES算法

DES加密算法是一种 分组密码,以 64位为 分组对数据加密,它的密钥长度 是 56位,加密解密用同一算法。

DES 加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为 2 ^ 56 次。

# 3DES算法

是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于前后端加密解密,Hutool 并没有提供直接的加密解密功能,但它提供了一些工具类可以方便地调用常用的加密解密算法。你可以使用这些工具类来实现前后端的加密解密操作。 在前端部分,可以使用 JavaScript 的加密库,如 CryptoJS,来进行加密操作。CryptoJS 提供了多种常见的加密算法,包括对称加密(如 AES、DES)和哈希算法(如 MD5、SHA),你可以根据具体需求选择合适的算法进行加密。 在后端部分,你可以使用 Hutool 的工具类进行加密解密操作。Hutool 提供了多个加密解密相关的工具类,包括 AESUtil、DESUtil、RSAUtil 等。你可以根据需要选择合适的工具类来完成相应的加密解密操作。 例如,如果你想在前端使用 AES 进行加密,在后端使用 Hutool 进行解密,可以按照以下步骤进行操作: 1. 在前端使用 CryptoJS 进行 AES 加密: ```javascript // 密钥和偏移量 var key = CryptoJS.enc.Utf8.parse("1234567890123456"); var iv = CryptoJS.enc.Utf8.parse("1234567890123456"); // 加密 var encrypted = CryptoJS.AES.encrypt("plaintext", key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); // 获取加密后的密文 var ciphertext = encrypted.toString(); ``` 2. 在后端使用 Hutool 进行 AES 解密: ```java // 密钥和偏移量 String key = "1234567890123456"; String iv = "1234567890123456"; // 解密 String decrypted = AESUtil.decrypt(ciphertext, key, iv); ``` 注意,前后端加密解密需要保持一致的密钥和算法参数,以确保正确的加解密结果。另外,加密解密涉及到数据安全,建议在实际应用中仔细设计和验证加密算法的安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值