昨天优化前端登录组件发现前端的密码在HTTP传输过程中密码是明文传输的,这样就很不安全了,所以我决定对前端的密码进行加密
考虑到我服务器端的密码已经使用了Bcrypt算法对存入数据库的密码进行了加密,最终前端的加密算法我选择了AES,
每次登录前时服务器生成一个随机的密钥,发送给客户端,客户端使用这个密钥对密码进行加密,然后返回给服务器进行解密并和数据库中的密码进行比对
首先,因为密钥是每次请求时随机生成的,不管登录失败还是成功,密钥都会销毁,不会多次使用同一密钥,从而产生安全漏洞
这里说明下,随机生成的密钥存放在session中,请求完成后或者绘画断开密钥会随即销毁掉
废话不多说,上代码!!!
服务器实现代码
依赖包
import org.springframework.util.Base64Utils;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
Base64编码解码器
public byte[] base64Decode(String plaintext) {
return Base64Utils.decodeFromString(plaintext);