資料加密
場景:我們用戶端請求服務端時資料正常都是明文傳輸,這樣的話容易出現資料安全漏洞
例子:登入注冊時傳輸的密碼,還是使用者個人敏感資訊,都是明文傳輸的話就太不安全了
解決:是以我們在用戶端傳輸的時候,用非對稱加密算法RSA進行加密保護資料傳輸,服務端生成公私鑰後儲存,公鑰給用戶端進行加密,私鑰在我們的服務端進行資料解密,私鑰要保護好!私鑰要保護好!私鑰要保護好!
代碼:
// 需要的夾包依賴maven
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.5</version>
</dependency>
// lombok idea插件自己裝
package com.common.utils;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import lombok.extern.slf4j.Slf4j;
/**
* @author HeZeMin
* @className RsaBase64Utils
* @description RSA非對稱加密,base64轉碼
* @date 2020/7/3 10:24
*/
@Slf4j
public class RsaBase64Utils {
// AES+base64編碼秘鑰,解密需要base64解碼-test
public static final String AES_BASE64_KEY = "";
// 公鑰-用于加密
private static final String PUBLIC_KEY = "xxxxxxxxxxx";
// 私鑰-用于解密
private static final String PRIVATE_KEY = "xxxxxxxxxxxxxxxxxxxxxxxx";
/**
*
* @Description 根據base64編碼串,先base64解碼再進行RSA私鑰解密
* @Return: java.lang.String
* @Author HeZeMin
* @Date 2020年07月03日 10:27
*/
public static String decrypt(String base64DecodeStr) throws Exception {
try {
RSA rsa1 = new RSA(PRIVATE_KEY, null);
byte[] decode = Base64.decode(base64DecodeStr);
byte[] decrypt = rsa1.decrypt(decode, KeyType.PrivateKey);
return StrUtil.utf8Str(decrypt);
} catch (Exception e) {
throw new Exception("密碼解密失敗!");
}
}
/**
*
* @Description 把資料進行RSA公鑰加密,再base64編碼
* @Return: java.lang.String
* @Author HeZeMin
* @Date 2020年07月03日 10:28
*/
public static String encrypt(String dataStr){
RSA rsa = new RSA(null, PUBLIC_KEY);
byte[] encrypt = rsa.encrypt(StrUtil.bytes(dataStr, CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
String encode = Base64.encode(encrypt);
return encode;
}
public static void main(String[] args) {
RSA rsa = new RSA();
//獲得私鑰
log.info("getPrivateKeyBase64:{}", rsa.getPrivateKeyBase64());
//獲得公鑰
log.info("getPublicKeyBase64:{}", rsa.getPublicKeyBase64());
}
}