RAS非对称加密java实现demo

package com.mine.lea.encrypt;

import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64;

import javax.crypto.Cipher;
import java.io.FileReader;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

public class EncryptMain {


    @SneakyThrows
    public static void main(String[] args) {

        KeyPairGenerator pairGenerator = KeyPairGenerator.getInstance("RSA");
        pairGenerator.initialize(512,new SecureRandom());
        KeyPair keyPair = pairGenerator.generateKeyPair();
        RSAPrivateKey aPrivate = (RSAPrivateKey)keyPair.getPrivate();
        RSAPublicKey aPublic = (RSAPublicKey)keyPair.getPublic();
        String privateKey = Base64.encodeBase64URLSafeString(aPrivate.getEncoded());
        System.out.println("privateKey:"+privateKey);
        System.out.println();
        String publicKey = Base64.encodeBase64URLSafeString(aPublic.getEncoded());
        System.out.println("publicKey:"+publicKey);
        System.out.println();

        PublicKey rsaPublicKey = KeyFactory.getInstance("RSA")
                .generatePublic(new X509EncodedKeySpec(Base64.decodeBase64(publicKey)));
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE,rsaPublicKey);
        String toencStr = "yyyyyyyyyyyyyyyyy";//getFileContent();
        String encryptStr = Base64.encodeBase64URLSafeString(cipher.doFinal(toencStr.getBytes(StandardCharsets.UTF_8)));
        System.out.println("encryptStr:"+encryptStr);
        System.out.println();


        PrivateKey rsaPrivateKey = KeyFactory.getInstance("RSA")
                .generatePrivate(new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey)));
        Cipher acipher = Cipher.getInstance("RSA");
        acipher.init(Cipher.DECRYPT_MODE,rsaPrivateKey);
        byte[] bytes = acipher.doFinal(Base64.decodeBase64(encryptStr));
        System.out.println("decoded:"+new String(bytes));


    }

    @SneakyThrows
    public static String getFileContent() {
        FileReader fileReader =
                new FileReader("D:/tmp/myfile.txt");
        char[] buf = new char[1024];
        StringBuilder builder = new StringBuilder();
        int read = 0;
        while (read != -1){
            read = fileReader.read(buf);
            builder.append(buf);
            buf = new char[1024];
        }
        return builder.toString();
    }

}
您的感觉是什么
更新 2023年3月13日