자바 구현 RSA 암호 화 알고리즘 상세 설명
비대 칭 암호 화
1.암호 화 된 키 는 암호 화 된 키 와 다 릅 니 다.이러한 암호 화 알고리즘 을 비대 칭 암호 화 라 고 합 니 다.
2.키 는 공개 키,비밀 키 로 나 뉜 다.
공개 키:대외 적 으로 누구 에 게 나 암호 화 되 고 복호화 할 수 있 는 비밀 번 호 는 공개 적 입 니 다.
비밀 키:비밀 키 를 통 해 공개 키 를 생 성 할 수 있 지만 공개 키 에서 공개 키 를 생 성 할 수 없다 고 여 겨 집 니 다(유도 되 는 확률 은 고려 하지 않 을 정도 로 작 습 니 다)
3.암호 화 할 내용 을 공개 키 로 암호 화 할 때 비밀 키 로 만 복호화 할 수 있 습 니 다.
암호 화 할 내용 을 비밀 키 로 암호 화 할 때 공개 키 로 만 복호화 할 수 있 습 니 다.
4.공개 키 와 비밀 키 의 관 계 는 간단 한 공식 을 이용 하여 공개 키 와 비밀 키 를 생 성 한다.즉,비대 칭 암호 화 된 공개 키 와 비밀 키 사이 에 특정한 공식 적 인 관계 가 존재 한다.
5.흔히 볼 수 있 는 비대 칭 암호 화 알고리즘
RSA,DSA
2.RSA 알고리즘 이 무엇 입 니까?
RSA 알고리즘 은 비대 칭 암호 화 알고리즘 입 니 다.비대 칭 이란 이 알고리즘 이 한 쌍 의 키 가 필요 하고 그 중 하 나 를 사용 하면 다른 하 나 를 사용 해 야 복호화 할 수 있 습 니 다.
RSA 의 알고리즘 은 세 개의 매개 변수,n,e1,e2 와 관련된다.
그 중에서 n 은 두 개의 큰 질 수 p,q 의 적 이 고 n 의 바 이 너 리 는 표시 할 때 사용 하 는 자릿수 이 며 이른바 키 길이 입 니 다.
e1 과 e2 는 한 쌍 의 관련 값 으로 e1 은 임의로 취 할 수 있 으 나 e1 과(p-1)*(q-1)의 상호 질 을 요구한다.e2,요구(e2*e1)mod((p-1)*(q-1)=1 을 선택 하 십시오.
(n,e1),(n,e2)키 쌍 입 니 다.그 중에서(n,e1)은 공개 키 이 고(n,e2)는 비밀 키 이다.
RSA 복호화 알고리즘 은 똑 같 습 니 다.A 를 명문 으로 설정 하고 B 를 비밀문 으로 설정 하면 A=B^e2 mod n;B=A^e1 mod n;(공개 키 암호 화 시스템 에서 일반적으로 공개 키 로 암호 화하 고 비밀 키 로 복호화 합 니 다)
e1 과 e2 는 교환 해서 사용 할 수 있다.즉,:
A=B^e1 mod n;B=A^e2 mod n;
3.RSA 암호 화 알고리즘 의 사용
1.RSA 키 생 성,KeyPair 대상 되 돌리 기
KeyPair 는 비대 칭 암호 화 에 사 용 됩 니 다.KeyPair 에는 공개 키 와 비밀 키 가 포함 되 어 있 습 니 다.
/**
*
* @param keySize 1024,2048 , 1024
* @return
*/
public static KeyPair generateRSAKeyPair(int keySize){
KeyPair ret = null;
try {
//1、
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
//2、 ,
generator.initialize(keySize);
//3、 ,
ret = generator.generateKeyPair();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return ret;
}
2.비밀 키 와 공개 키 가 져 오기PublicKey 와 PrivateKey 는 모두 Key 타 입 입 입 니 다.
KeyPair keyPair = EncryptUtil.generateRSAKeyPair(1024);
// ,
PublicKey publicKey = keyPair.getPublic();
//
PrivateKey privateKey = keyPair.getPrivate();
3.RSA 암호 화
/**
* RSA
* @param data
* @param key PublicKey, PrivateKey
* @return
*/
public static byte[] rsaEncrypt(byte[] data ,Key key){
byte[] ret = null;
if (data != null
&& data.length>0
&& key!=null) {
// 1、 Cipher RSA
try {
Cipher cipher = Cipher.getInstance("RSA");
// Key
cipher.init(Cipher.ENCRYPT_MODE,key);
ret = cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}
return ret;
}
4.RSA 복호화
/**
* RSA
* @param data
* @param key PublicKey, PrivateKey
* @return
*/
public static byte[] rsaDecrypt(byte[] data ,Key key){
byte[] ret = null;
if (data != null
&& data.length>0
&& key!=null) {
// 1、 Cipher RSA
try {
Cipher cipher = Cipher.getInstance("RSA");
// Key
cipher.init(Cipher.DECRYPT_MODE,key);
ret = cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}
return ret;
}
5.공개 키 와 비밀 키 의 저장공개 키 와 비밀 키 를 만 든 후에 우 리 는 저장 한 후에 사용 해 야 한다.
//
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
// PublicKey PrivateKey , 、
byte[] publicKeyEncoded = publicKey.getEncoded();
byte[] privateKeyEncoded = privateKey.getEncoded();
// Base64
String publickey = Base64.encodeToString(publicKeyEncoded, Base64.NO_WRAP);
String privatekey = Base64.encodeToString(privateKeyEncoded, Base64.NO_WRAP);
//
。。。。
6.공개 키 와 비밀 키 의 로드보통 1.키 쌍 2 가 져 오기,공개 키 가 져 오기,비밀 키 3 가 져 오기,공개 키 저장,비밀 키 저장,저장 형식 은 기본적으로 문자열 형식 입 니 다.
그러면 앞으로 사용 할 때 공개 키 와 비밀 키 를 가 져 와 서 사용 해 야 합 니 다.
알 아야 할 것:
6.1 KeyFactory 는 해당 하 는 공개 키 와 비밀 키 를 불 러 올 수 있 습 니 다.
6.2.공개 키 로 딩 사용
X509EncodedKeySpec(byte[])
6.3.비밀 키 로 딩 사용PCKS8EncodedKeySpec(byte[])
//
//str_publickey ( byte[] )
//
byte[] publicdecode = Base64.decode(new String(str_publickey), Base64.NO_WRAP);
// X509EncodedKeySpec
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicdecode);
//
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
//
PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
//
//
//str_private
byte[] privatedecode = Base64.decode(new String(str_private), Base64.NO_WRAP);
// X509EncodedKeySpec
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privatedecode);
//
keyFactory = KeyFactory.getInstance("RSA");
//
PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
PS:암호 화 복호화 에 관심 이 있 는 친 구 는 본 사이트 의 온라인 도 구 를 참고 할 수 있 습 니 다.MD5 온라인 암호 화 도구:
http://tools.jb51.net/password/CreateMD5Password
천둥,급행열차,회오리 URL 암호 화/복호화 도구:
http://tools.jb51.net/password/urlrethunder
온라인 해시/해시 알고리즘 암호 화 도구:
http://tools.jb51.net/password/hash_encrypt
온라인 MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160 암호 화 도구:
http://tools.jb51.net/password/hash_md5_sha
온라인 sha 1/sha 224/sha 256/sha 384/sha 512 암호 화 도구:
http://tools.jb51.net/password/sha_encode
자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.