RSA非對稱加密[原]

 

使用hutool工具類加密

 官方API https://apidoc.gitee.com/dromara/hutool/

 

加密代碼

package com.rosellete.iescp.temp;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import org.bouncycastle.util.encoders.Base64;

import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;

//https://blog.csdn.net/loolly/article/details/77539928
public class Test {

    public static void main(String[] args) {

        KeyPair pair = SecureUtil.generateKeyPair("RSA");
        final PrivateKey aPrivate = pair.getPrivate();
        final PublicKey aPublic = pair.getPublic();
        System.out.println( StrUtil.str(Base64.encode(aPrivate.getEncoded()),"UTF-8"));

        //創建RSA
        RSA rsa = new RSA(aPrivate,aPublic);

        //獲得私鑰
        rsa.getPrivateKey();
        rsa.getPrivateKeyBase64();
        //獲得公鑰
        rsa.getPublicKey();
        rsa.getPublicKeyBase64();

        String srcStr = "srcData123456";

        //將 "待加密明文字符串" 通過 公鑰加密 成 "加密後的byte數組"
        byte[] encrypt = rsa.encrypt(StrUtil.bytes(srcStr, CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);//公鑰加密

        //將 "加密後的byte數組" 通過base64轉成 "加密後base64字符串"
        String encryptBase64Str = StrUtil.str(Base64.encode(encrypt), CharsetUtil.CHARSET_UTF_8);

        System.out.println(srcStr + "經過公鑰加密後的base64字符串:" + encryptBase64Str);

        //將 "加密後的byte數組" 解密成 "解密後的byte數組"
        byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey);

        //將 "解密後的byte數組" 通過 私鑰解密 成"解密後的明文字符串"
        String decryptStr = StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8);

        System.out.println("解密後的明文字符串:" + decryptStr);

        //私鑰加密,公鑰解密
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章