Java Language
보안 및 암호화
수색…
암호화 해시 계산
서로 다른 알고리즘을 사용하여 상대적으로 작은 데이터 블록의 해시를 계산하려면 다음을 수행하십시오.
final MessageDigest md5 = MessageDigest.getInstance("MD5");
final MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
final MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
final byte[] data = "FOO BAR".getBytes();
System.out.println("MD5 hash: " + DatatypeConverter.printHexBinary(md5.digest(data)));
System.out.println("SHA1 hash: " + DatatypeConverter.printHexBinary(sha1.digest(data)));
System.out.println("SHA256 hash: " + DatatypeConverter.printHexBinary(sha256.digest(data)));
이 출력을 생성합니다.
MD5 hash: E99E768582F6DD5A3BA2D9C849DF736E
SHA1 hash: 0135FAA6323685BA8A8FF8D3F955F0C36949D8FB
SHA256 hash: 8D35C97BCD902B96D1B551741BBE8A7F50BB5A690B4D0225482EAA63DBFB9DED
자바 플랫폼의 구현에 따라 추가 알고리즘을 사용할 수 있습니다.
암호로 무작위 데이터 생성
암호 무작위 데이터의 샘플을 생성하려면 다음을 수행하십시오.
final byte[] sample = new byte[16];
new SecureRandom().nextBytes(sample);
System.out.println("Sample: " + DatatypeConverter.printHexBinary(sample));
다음과 유사한 출력을 생성합니다.
Sample: E4F14CEA2384F70B706B53A6DF8C5EFE
nextBytes()
대한 호출은 사용되는 알고리즘에 따라 엔트로피가 수집되는 동안 차단 될 수 있습니다.
알고리즘 및 공급자를 지정하려면
final byte[] sample = new byte[16];
final SecureRandom randomness = SecureRandom.getInstance("SHA1PRNG", "SUN");
randomness.nextBytes(sample);
System.out.println("Provider: " + randomness.getProvider());
System.out.println("Algorithm: " + randomness.getAlgorithm());
System.out.println("Sample: " + DatatypeConverter.printHexBinary(sample));
다음과 유사한 출력을 생성합니다.
Provider: SUN version 1.8
Algorithm: SHA1PRNG
Sample: C80C44BAEB352FD29FBBE20489E4C0B9
공개 키 / 개인 키 쌍 생성
다른 알고리즘 및 키 크기를 사용하여 키 쌍을 생성하려면 다음을 수행하십시오.
final KeyPairGenerator dhGenerator = KeyPairGenerator.getInstance("DiffieHellman");
final KeyPairGenerator dsaGenerator = KeyPairGenerator.getInstance("DSA");
final KeyPairGenerator rsaGenerator = KeyPairGenerator.getInstance("RSA");
dhGenerator.initialize(1024);
dsaGenerator.initialize(1024);
rsaGenerator.initialize(2048);
final KeyPair dhPair = dhGenerator.generateKeyPair();
final KeyPair dsaPair = dsaGenerator.generateKeyPair();
final KeyPair rsaPair = rsaGenerator.generateKeyPair();
자바 플랫폼 구현시 추가 알고리즘과 키 크기를 사용할 수 있습니다.
키를 생성 할 때 사용할 임의성 소스를 지정하려면 다음을 수행하십시오.
final KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048, SecureRandom.getInstance("SHA1PRNG", "SUN"));
final KeyPair pair = generator.generateKeyPair();
디지털 서명 계산 및 확인
서명을 계산하려면 다음과 같이하십시오.
final PrivateKey privateKey = keyPair.getPrivate();
final byte[] data = "FOO BAR".getBytes();
final Signature signer = Signature.getInstance("SHA1withRSA");
signer.initSign(privateKey);
signer.update(data);
final byte[] signature = signer.sign();
서명 알고리즘은 키 쌍을 생성하는 데 사용 된 알고리즘과 호환 가능해야합니다.
서명을 확인하려면 다음과 같이하십시오.
final PublicKey publicKey = keyPair.getPublic();
final Signature verifier = Signature.getInstance("SHA1withRSA");
verifier.initVerify(publicKey);
verifier.update(data);
System.out.println("Signature: " + verifier.verify(signature));
이 출력을 생성합니다.
Signature: true
공개 키 / 개인 키로 데이터 암호화 및 암호 해독
공개 키를 사용하여 데이터를 암호화하려면 다음을 수행하십시오.
final Cipher rsa = Cipher.getInstance("RSA");
rsa.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
rsa.update(message.getBytes());
final byte[] result = rsa.doFinal();
System.out.println("Message: " + message);
System.out.println("Encrypted: " + DatatypeConverter.printHexBinary(result));
다음과 유사한 출력을 생성합니다.
Message: Hello
Encrypted: 5641FBB9558ECFA9ED...
Cipher
객체를 만들 때 사용되는 키 유형과 호환되는 변형을 지정해야합니다. 지원되는 변환 목록은 JCA 표준 알고리즘 이름 을 참조하십시오. RSA 암호화 데이터의 경우 message.getBytes()
길이는 키 크기보다 작아야합니다. 자세한 내용은이 SO 응답 을 참조하십시오.
데이터를 해독하려면 다음을 수행하십시오.
final Cipher rsa = Cipher.getInstance("RSA");
rsa.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
rsa.update(cipherText);
final String result = new String(rsa.doFinal());
System.out.println("Decrypted: " + result);
다음 출력을 생성합니다.
Decrypted: Hello