Web 密码传输

Web 密码传输。MD5(不建议使用),SHA1(不建议使用),SHA256,SHA-512 前端将用户输入的密码加密,提交到后端保存数据库,数据库不保留真实密码。登录验证时,使用加密后字符串与数据库记录对比。

Web 密码传输

单向加密

MD5(不建议使用),SHA1(不建议使用),SHA256,SHA-512

前端将用户输入的密码加密,提交到后端保存数据库,数据库不保留真实密码。登录验证时,使用加密后字符串与数据库记录对比。

对称加密

加密和解密是使用同一个密钥,效率高,不安全

DES,3DES,AES,IDEA,RC4,RC5

非对称加密

RSA,DSA

前端使用公钥加密,后端使用私钥解密。后端可以通过私钥解密获取到真实密码。

RSA 非对称加密示例

前端使用公钥加密密码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import JSEncrypt from "jsencrypt"

var publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJj8gyEUI3ZtOSJEXmU2HlGA6dSUfpRcPVlQV+3lL3d0i0+8zJLwNmqlnieQIS+B6du/jqQoZgEsJouAH4AJGSsCAwEAAQ==";
const encrypt  = new JSEncrypt();
encrypt .setPublicKey(publicKey);
password = encrypt .encrypt(password);

login({
    "username": username,
    "password": password
}).then(...)

后端使用私钥解密

1
String password = SecureUtil.rsa(myConfig.getPrivateRSAKey(), null).decryptStr(password, KeyType.PrivateKey);
1
2
3
4
5
6
<!--hutool-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.5</version>
</dependency>

其他

Base64

Base64 不属于加密,仅为编码转换

client_secret 和 client_id 的可用性

这种方式常用于固定的客户端(例如:系统后端、不需要特定用户登陆的Web端或C端等)

可通过 client_id 分辨请求来源,方便后续追溯和统计。

携带参数的方式

  • 放在 url 里

http://127.0.0.1:8080/index.html?client_id=123&client_secret=abc

  • 放在请求头里
1
2
3
4
Header{
    "client_id": 123,
    "client_secret": "abc"
}
  • 加密后携带

使用自定义格式拼接client_secret 和 client_id,并对拼接后的字符串进行单向加密。加密后放在 url 里,或者以 token 的方式放到请求头里。

Gear(夕照)的博客。记录开发、生活,以及一些不足为道的思考……