openssl, java에서 RSA 비밀키, 공개키 생성, 전자서명 방법

RSA암호화 알고리즘의 사용을 위한 개인 키, 공개 키 생성 방법입니다.자바에서 사용하려면 PEM+PKCS#8형식으로 하는 것이 간소하게 보입니다.■ PEM vs DER공개 열쇠 기반 알고리즘의 키 파일의 인코딩 방식은 PEM, DER이 있습니다.-PEM:BASE64에서 인코딩된 아스키 형식-DER:바이너리 형식 ■ PKCS#1 vs PKCS#8 PEM형식은 PKCS#1, PKCS#8형식이 있습니다.겉치레의 차이를 보면 이렇습니다.-PKCS#1헤더가 BEGIN RSA PRIVATE KEY에서 자바에서 지원하지 않-PKCS#8:헤더가 BEGIN PRIVATE KEY에서 자바에서 지원하는 ■ openssl에 RSA개인 키, 공개 키 생성 방법#개인 키 pkcs#1형식에서 생성 genrsa-out private_key1.pem 2048#개인 키 pkcs#1이고 pkcs#8형식으로 변환 pkcs8-in private_key1.pem-inform PEM-out private_key8.pem-outform PEM-topk8-nocrypt#공개 키 pkcs#8형식으로 생성 rsa-in private_key8.pem-out public_key8.pem-pubout※자바에서 PKCS#1형식은 지원하지 않으려면 PKCS#8으로 변환할 ■ JAVA에서 RSA개인 키, 공개 키 생성 아래 링크에 잘 정리된 예제가 있어서 가지고 사용했습니다.https://gist.github.com/stunstunstun/8dbc82bd86f38c9232139e0ba9a7d8ad RSA암호화 알고리즘의 사용을 위한 개인 키, 공개 키 생성 방법입니다.자바에서 사용하려면 PEM+PKCS#8형식으로 하는 것이 간소하게 보입니다.■ PEM vs DER공개 열쇠 기반 알고리즘의 키 파일의 인코딩 방식은 PEM, DER이 있습니다.-PEM:BASE64에서 인코딩된 아스키 형식-DER:바이너리 형식 ■ PKCS#1 vs PKCS#8 PEM형식은 PKCS#1, PKCS#8형식이 있습니다.겉치레의 차이를 보면 이렇습니다.-PKCS#1헤더가 BEGIN RSA PRIVATE KEY에서 자바에서 지원하지 않-PKCS#8:헤더가 BEGIN PRIVATE KEY에서 자바에서 지원하는 ■ openssl에 RSA개인 키, 공개 키 생성 방법#개인 키 pkcs#1형식에서 생성 genrsa-out private_key1.pem 2048#개인 키 pkcs#1이고 pkcs#8형식으로 변환 pkcs8-in private_key1.pem-inform PEM-out private_key8.pem-outform PEM-topk8-nocrypt#공개 키 pkcs#8형식으로 생성 rsa-in private_key8.pem-out public_key8.pem-pubout※자바에서 PKCS#1형식은 지원하지 않으려면 PKCS#8으로 변환할 ■ JAVA에서 RSA개인 키, 공개 키 생성 아래 링크에 잘 정리된 예제가 있어서 가지고 사용했습니다.https://gist.github.com/stunstunstun/8dbc82bd86f38c9232139e0ba9a7d8ad

Security.javaSecurity.java. GitHub Gist: instantly share code, notes, and snippets.gist.github.com Security.javaSecurity.java. GitHub Gist: instantly share code, notes, and snippets.gist.github.com

 

public class Main<public static void main(String[]args)throws Exception<eyPair keyPair=Security.generateKeyPair();ncoder base64Encoder=Base64.getEncoder();//개인 키 생성 rivateKey privateKey=keyPair.getPrivate();yte[]privateKeyByte=privateKey.getEncoded();tring privateKeyBase64=new String(base64Encoder.encode(privateKeyByte);ystem.out.println(privateKeyBase64);//공개 키 생성 ublicKey publicKey=keyPair.getPublic();yte[]publicKeyByte=publicKey.getEncoded();tring publicKeyBase64=new String(base64Encoder.encode(publicKeyByte);ystem.out.println(publicKeyBase64);}}public class Main<public static void main(String[]args)throws Exception<eyPair keyPair=Security.generateKeyPair();ncoder base64Encoder=Base64.getEncoder();//개인 키 생성 rivateKey privateKey=keyPair.getPrivate();yte[]privateKeyByte=privateKey.getEncoded();tring privateKeyBase64=new String(base64Encoder.encode(privateKeyByte);ystem.out.println(privateKeyBase64);//공개 키 생성 ublicKey publicKey=keyPair.getPublic();yte[]publicKeyByte=publicKey.getEncoded();tring publicKeyBase64=new String(base64Encoder.encode(publicKeyByte);ystem.out.println(publicKeyBase64);}}

 

■ JAVA로 전자서명 ■ JAVA로 전자서명

public class Main<public static void main(String[]args)throws Exception<//평문 tring plainText=”Hello World”;eyPair keyPair=Security.generateKeyPair();//개인 키 rivateKey privateKey=keyPair.getPrivate();yte[]privateKeyByte=privateKey.getEncoded();//공개키 ublicKey publicKey=keyPair.getPublic();yte[]publicKeyByte=publicKey.getEncoded();//개인 키로 전자 서명 tring signatureText=Security.sign(plainText, privateKeyByte);//공개키로 전자 서명 검증 oolean ret=Security.verify(plainText, signatureText, publicKeyByte);ystem.out.println(ret);}}public class Main<public static void main(String[]args)throws Exception<//평문 tring plainText=”Hello World”;eyPair keyPair=Security.generateKeyPair();//개인 키 rivateKey privateKey=keyPair.getPrivate();yte[]privateKeyByte=privateKey.getEncoded();//공개키 ublicKey publicKey=keyPair.getPublic();yte[]publicKeyByte=publicKey.getEncoded();//개인 키로 전자 서명 tring signatureText=Security.sign(plainText, privateKeyByte);//공개키로 전자 서명 검증 oolean ret=Security.verify(plainText, signatureText,publicKeyByte);ystem.out.println(ret);}}

 

 

Scroll to Top