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();
}
}