다음과 같이 코드 코드를 복사합니다.
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
java.security.MessageDigest 가져오기;
import java.security.NoSuchAlgorithmException;
java.security.PrivateKey 가져오기;
java.security.PublicKey 가져오기;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
javax.crypto.SecretKey 가져오기;
com.sun.mail.util.BASE64DecoderStream 가져오기;
com.sun.mail.util.BASE64EncoderStream 가져오기;
공개 클래스 유틸리티 {
/**
* RSA로 데이터를 복호화하려면 이름과 공개 키를 전달하세요.
* <br>반환값: 문자열
* <br>@param src
* <br>@param pubkey
* <br>@반환
*/
공개 정적 문자열 rsaEncoding(문자열 src,PublicKey pubkey){
노력하다 {
암호 cip = Cipher.getInstance("RSA");
cip.init(cip.ENCRYPT_MODE, pubkey);
byte[] by = cip.doFinal(src.getBytes());
새로운 문자열을 반환(BASE64EncoderStream.encode(by));
} 잡기(NoSuchAlgorithmException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(NoSuchPaddingException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(InvalidKeyException e) {
새로운 RuntimeException(e)을 던져라;
} catch (IllegalBlockSizeException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(BadPaddingException e) {
새로운 RuntimeException(e)을 던져라;
}
}
/**
* 데이터를 해독하려면 RSA 암호문과 개인 키를 전달하세요.
* <br>반환값: 문자열
* <br>@param 초
* <br>@param privkey
* <br>@반환
*/
공개 정적 문자열 rsaDeEncoding(String sec,PrivateKey privkey){
노력하다 {
암호 cip = Cipher.getInstance("RSA");
cip.init(cip.DECRYPT_MODE, 개인 키);
byte[] by = BASE64DecoderStream.decode(sec.getBytes());
return new String(cip.doFinal(by));
} 잡기(NoSuchAlgorithmException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(NoSuchPaddingException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(InvalidKeyException e) {
새로운 RuntimeException(e)을 던져라;
} catch (IllegalBlockSizeException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(BadPaddingException e) {
새로운 RuntimeException(e)을 던져라;
}
}
/**
* 문자열, 키 입력 및 문자열 암호화(대칭 암호화 암호화), 지원: DES, AES, DESede(3DES)
* <br>반환값: 문자열 암호문
* <br>@param src
* <br>@param 키
* <br>@param 메소드(DES, AES, DESede)
* <br>@반환
*/
//대칭 암호화 암호화
공개 정적 문자열 doubKeyEncoding(문자열 src, 문자열 키, 문자열 메서드) {
SecretKey 키;
노력하다 {
//키 생성
KeyGenerator kg = KeyGenerator.getInstance(메소드);
//이 키 생성기를 초기화합니다.
kg.init(new SecureRandom(keysrc.getBytes("utf-8")));
키 = kg.generateKey();
//암호화
암호 ciph = Cipher.getInstance(method);
ciph.init(Cipher.ENCRYPT_MODE, 키);
ciph.update(src.getBytes("utf-8"));
//데이터 손실 시나리오를 방지하기 위해 인코딩에 64를 사용합니다.
byte[] by = BASE64EncoderStream.encode(ciph.doFinal());
새로운 문자열을 반환(by);
} 잡기(NoSuchAlgorithmException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(NoSuchPaddingException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(InvalidKeyException e) {
새로운 RuntimeException(e)을 던져라;
} catch (IllegalBlockSizeException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(BadPaddingException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(UnsupportedEncodingException e) {
새로운 RuntimeException(e)을 던져라;
}
}
/**
* 입력 문자열, 키, 암호화 방법 및 문자열 복호화(대칭 암호화 및 복호화), 지원: DES, AES, DESede(3DES)
*<br>생성 시간: 2014년 5월 2일 오후 1:12:13
* <br>반환값: 문자열 키 텍스트
* <br>@param 초
* <br>@param 키
* <br>@param 메소드(DES, AES, DESede)
* <br>@반환
*/
공개 정적 문자열 doubKeyDencoding(문자열 sec,문자열 키rc,문자열 메서드) {
SecretKey 키;
노력하다 {
//키 생성
KeyGenerator kg = KeyGenerator.getInstance(메소드);
//이 키 생성기를 초기화합니다.
kg.init(new SecureRandom(keysrc.getBytes("utf-8")));
키 = kg.generateKey();
//암호화
암호 ciph = Cipher.getInstance(method);
ciph.init(ciph.DECRYPT_MODE, 키);
//데이터 손실 시나리오를 방지하기 위해 디코딩에 64를 사용합니다.
byte[] by = BASE64DecoderStream.decode(sec.getBytes());
ciph.update(by);
새로운 문자열(ciph.doFinal())을 반환합니다.
} 잡기(NoSuchAlgorithmException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(NoSuchPaddingException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(InvalidKeyException e) {
새로운 RuntimeException(e)을 던져라;
} catch (IllegalBlockSizeException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(BadPaddingException e) {
새로운 RuntimeException(e)을 던져라;
} 잡기(UnsupportedEncodingException e) {
새로운 RuntimeException(e)을 던져라;
}
}
/**
* 단방향 정보 암호화(정보 다이제스트), 지원: md5, md2, SHA(SHA-1, SHA1), SHA-256, SHA-384, SHA-512,
* <br>반환값: 문자열 암호화된 암호문
* <br>@param src 암호화된 문자열(일반 텍스트)을 전달합니다.
* <br>@param 메소드는 알고리즘(md5, md2, SHA(SHA-1, SHA1), SHA-256, SHA-384, SHA-512)을 지정합니다.
* <br>@반환
*/
공개 정적 문자열 인코딩Passwd(String src,String 메서드){
노력하다 {
//정보 요약 알고리즘
MessageDigest md5 = MessageDigest.getInstance(메소드);
md5.update(src.getBytes());
byte[] 인코딩 = md5.digest();
//데이터 손실 시나리오를 방지하기 위해 인코딩에 64를 사용합니다.
새로운 문자열(BASE64EncoderStream.encode(인코딩))을 반환합니다.
} 잡기(NoSuchAlgorithmException e) {
throw new RuntimeException(e+"암호화 실패!!");
}
}
}