일반적인 비밀번호로는 데이터베이스 사용자 비밀번호, SMS 플랫폼 사용자 비밀번호, 시스템 간 확인을 위한 고정 비밀번호 등이 있습니다.
이 도구 클래스는 "Spring.3.x Enterprise Application Development Practice" 책의 섹션 5.3 구현을 참조합니다.
전체 코드와 주석 정보는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
패키지 com.cncounter.util.comm;
java.security.Key 가져오기;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
공개 클래스 DESUtils {
// 열쇠
개인 정적 키 키;
// 키 시드
개인 정적 문자열 KEY_STR = "[email protected]";
// 끊임없는
공개 정적 최종 문자열 UTF_8 = "UTF-8";
공개 정적 최종 문자열 DES = "DES";
// 정적 초기화
공전{
노력하다 {
// 키 생성기
KeyGenerator 생성기 = KeyGenerator.getInstance(DES);
//초기화, 보안 임의 연산자
Generator.init(new SecureRandom( KEY_STR.getBytes(UTF_8) ));
// 키 생성
키 = Generator.generateKey();
생성기 = null;
} 잡기(예외 e) {
새로운 RuntimeException(e)을 던져라;
}
}
/**
* 소스 문자열을 암호화하고 BASE64로 인코딩된 암호화된 문자열을 반환합니다.
* @param 소스 소스 문자열, 일반 텍스트
* @return 암호문 문자열
*/
공개 정적 문자열 인코딩(문자열 소스){
노력하다 {
// 인코딩 형식에 따라 바이트 배열을 가져옵니다.
byte[] sourceBytes = source.getBytes(UTF_8);
// DES 암호화 모드
암호 암호 = Cipher.getInstance(DES);
cipher.init(Cipher.ENCRYPT_MODE, 키);
// 암호화된 바이트 배열
byte[] encryptSourceBytes = cipher.doFinal(sourceBytes);
// Base64 인코더
BASE64Encoder base64Encoder = new BASE64Encoder();
return base64Encoder.encode(encryptSourceBytes);
} 잡기(예외 e) {
// throw는 반환 경로로도 간주될 수 있습니다.
새로운 RuntimeException(e)을 던져라;
}
}
/**
* 이 도구 클래스의 encode() 메소드로 암호화된 문자열을 디코딩/복호화합니다.
* @param crypto 암호화된 문자열, 즉 암호문
* @return 일반 텍스트 문자열
*/
공개 정적 문자열 디코드(문자열 암호화){
// Base64 디코더
BASE64Decoder base64Decoder = new BASE64Decoder();
노력하다 {
//base64를 먼저 디코딩
byte[] cryptedBytes = base64Decoder.decodeBuffer(암호화);
// DES 복호화 모드
암호 암호 = Cipher.getInstance(DES);
cipher.init(Cipher.DECRYPT_MODE, 키);
//디코딩된 바이트 배열
byte[] decryptStrBytes = cipher.doFinal(cryptedBytes);
// 주어진 인코딩 형식을 사용하여 바이트 배열을 문자열로 변환합니다.
새 문자열(decryptStrBytes, UTF_8)을 반환합니다.
} 잡기(예외 e) {
// 이 형식은 실제로 도구 클래스 처리에 적합합니다.
새로운 RuntimeException(e)을 던져라;
}
}
// 단위 테스트
공개 정적 무효 메인(String[] args) {
//암호화해야 할 문자열
문자열 이메일 = "[email protected]";
//암호화
암호화된 문자열 = DESUtils.encode(email);
// 복호화
해독된 문자열 = DESUtils.decode(암호화됨);
//결과 출력;
System.out.println("이메일: " + 이메일);
System.out.println("암호화됨: " + 암호화됨);
System.out.println("해독됨: " + 암호해독됨);
System.out.println("email.equals(해독됨): " + email.equals(해독됨));
}
}