天天看點

接口資料傳輸加密                                           資料加密

                                           資料加密

場景:我們用戶端請求服務端時資料正常都是明文傳輸,這樣的話容易出現資料安全漏洞

例子:登入注冊時傳輸的密碼,還是使用者個人敏感資訊,都是明文傳輸的話就太不安全了

解決:是以我們在用戶端傳輸的時候,用非對稱加密算法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());
    }
}
           
接口資料傳輸加密                                           資料加密