rsa 전단 암호 화 백 엔 드 복호화 사용
43572 단어 도구 클래스
bcprov - jdk15on - 1.55. jar 패키지 와 comons - codec - 1.9. jar 를 도입 해 야 합 니 다.
commons-codec
commons-codec
1.9
org.bouncycastle
bcprov-jdk15on
1.60
최초의 코드
public class RSAEncrypt {
/**
*
* @throws NoSuchAlgorithmException
*/
public static Map<String,String> genKeyPair() throws NoSuchAlgorithmException {
Map<String, String> keyMap = new HashMap<>();
// KeyPairGenerator , RSA
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
// , 96-1024
keyPairGen.initialize(1024,new SecureRandom());
// , keyPair
KeyPair keyPair = keyPairGen.genKeyPair();
System.out.println(keyPair.getPublic().getEncoded());
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); //
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); //
String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));
//
String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));
// Map
keyMap.put("pub",publicKeyString);
keyMap.put("pri",privateKeyString);
return keyMap;
}
/**
* RSA
*
* @param str
*
* @param publicKey
*
* @return
* @throws Exception
*
*/
public static String encrypt( String str, String publicKey ) throws Exception{
//base64
byte[] decoded = Base64.decodeBase64(publicKey);
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
//RSA
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
return outStr;
}
/**
* RSA
*
* @param str
*
* @param privateKey
*
* @return
* @throws Exception
*
*/
public static String decrypt(String str, String privateKey) throws Exception{
//64
byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));
//base64
byte[] decoded = Base64.decodeBase64(privateKey);
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
//RSA
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priKey);
String outStr = new String(cipher.doFinal(inputByte));
return outStr;
}
public static void main(String[] args) throws Exception {
//
Map<String, String> keyMap = genKeyPair();
//
String message = "123456";
System.out.println(" :" + keyMap.get("pub"));
System.out.println(" :" + keyMap.get("pri"));
String messageEn = encrypt(message,keyMap.get("pub"));
System.out.println(message + "\t :" + messageEn);
String messageDe = decrypt(messageEn,keyMap.get("pri"));
System.out.println(" :" + messageDe);
}
}
이 키 쌍 을 만 드 는 방식 은 난수 이기 때문에 매번 다 릅 니 다. 전단 암호 화가 끝나 면 복호화 하기에 적합 합 니 다. 저장 할 필요 가 없고 암호 화 전송 만 할 수 있 습 니 다.
keyPairGen.initialize(1024,new SecureRandom());
생 성 된 키 가 일치 할 때마다 수정 합 니 다.
// SecureRandom random = new SecureRandom();//windows linux ,
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
//
secureRandom.setSeed("seed".getBytes());
keyPairGenerator.initialize(1024, secureRandom);
백 엔 드 복호화 하면 이렇게 설정 할 수 있 습 니 다.
// 、 。 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());// 、
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",new BouncyCastleProvider());
최종 적 으로 수 정 된 코드, windows, Liux 는 모두 일치 하 는 키 쌍 을 생 성 합 니 다.
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
public class RSAEncrypt {
/**
*
* @throws NoSuchAlgorithmException
*/
public static Map<String,String> genKeyPair(String seed) throws NoSuchAlgorithmException {
Map<String, String> keyMap = new HashMap<>();
// KeyPairGenerator , RSA
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
//
secureRandom.setSeed(seed.getBytes());
// , 96-1024
keyPairGen.initialize(1024,secureRandom);
// , keyPair
KeyPair keyPair = keyPairGen.genKeyPair();
System.out.println(keyPair.getPublic().getEncoded());
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); //
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); //
String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));
//
String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));
// Map
keyMap.put("pub",publicKeyString);
keyMap.put("pri",privateKeyString);
return keyMap;
}
/**
* RSA
*
* @param str
*
* @param publicKey
*
* @return
* @throws Exception
*
*/
public static String encrypt( String str, String publicKey ) throws Exception{
//base64
byte[] decoded = Base64.decodeBase64(publicKey);
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
//RSA
// 、 。 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());// 、
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",new BouncyCastleProvider());
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
return outStr;
}
/**
* RSA
*
* @param str
*
* @param privateKey
*
* @return
* @throws Exception
*
*/
public static String decrypt(String str, String privateKey) throws Exception{
//64
byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));
//base64
byte[] decoded = Base64.decodeBase64(privateKey);
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
//RSA
// 、 。 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());// 、
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",new BouncyCastleProvider());
cipher.init(Cipher.DECRYPT_MODE, priKey);
String outStr = new String(cipher.doFinal(inputByte));
return outStr;
}
public static void main(String[] args) throws Exception {
//
Map<String, String> keyMap = genKeyPair("seed");
//
String message = "123456";
System.out.println(" :" + keyMap.get("pub"));
System.out.println(" :" + keyMap.get("pri"));
String messageEn = encrypt(message,keyMap.get("pub"));
System.out.println(message + "\t :" + messageEn);
String messageDe = decrypt(messageEn,keyMap.get("pri"));
System.out.println(" :" + messageDe);
}
}
프론트 엔 드 는 vue 를 사용 하여 npm 를 Vue 프로젝트 에 설치 할 수 있 습 니 다.
npm install jsencrypt --dev
페이지 도입 jsencrypt
import { JSEncrypt } from 'jsencrypt'
공개 키 는 백 엔 드 에 제공 합 니 다. 만약 에 전단 에 데 이 터 를 복호화 해 야 한다 면 백 엔 드 에 비밀 키 를 제공 해 야 합 니 다.
methods: {
//
encryptedData(publicKey, data) {
// JSEncrypt
let encryptor = new JSEncrypt();
//
encryptor.setPublicKey(publicKey);
//
return encryptor.encrypt(data);
},
//
decryptData(privateKey,data){
// JSEncrypt
let decrypt= new JSEncrypt();
//
decrypt.setPrivateKey(privateKey);
//
return decrypt.decrypt(secretWord);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 읽 기 도구 클래스package com.lb.util; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; im...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.