μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- database
- Java
- μ€λΌν΄
- html
- μ½λ©
- νλ‘κ·Έλλ°
- ComputerScience
- μ€λΈμ
- μ±
- μλ°μ€ν¬λ¦½νΈ
- css
- μλ°
- Kλ°°ν°λ¦¬
- λ°μ΄ν°λ² μ΄μ€
- JavaScript
- μΉνΌλΈλ¦¬μ±
- νμ΄μ¬
- λΌνλΌμ€μλ§λ
- Python
- μΉνμ΄μ§λ§λ€κΈ°
- 리μ‘νΈ
- Kλ°°ν°λ¦¬λ 볼루μ
- μν
- λ§μΌλ΄κ°μΈμμλ€μμ°λ€λ©΄
- κΉλ―Έκ²½μλ§νμμ
- μ»΄ν¨ν°κ³Όν
- ν°μ€ν 리μ±λ¦°μ§
- κ°λ°
- λ μ
- λ°μν
- Today
- Total
JiYoung Dev π₯
SHA-256λ₯Ό μ¬μ©ν λ¬Έμμ΄ μνΈν μμ - Java λ³Έλ¬Έ
μ§λλ² PKI ν¬μ€ν μμ μ΄μ΄μ§λ λ΄μ©μ λλ€.
- 2023.12.05 - [Study/보μ] - [μνΈν] PKI(Public Key Infrastructure)μ μ΄ν΄ - (1)
- 2023.12.12 - [Study/보μ] - [μνΈν] PKI(Public Key Infrastructure)μ μ΄ν΄ - (2) PKI, μΈμ¦μ, μ μμλͺ
PKIμ μνΈν λ°©λ²μ λν΄ μ€λͺ νλ©΄μ λ€μν μνΈν μκ³ λ¦¬μ¦μ΄ λ±μ₯νμ΅λλ€. μ΄λ² ν¬μ€ν μμλ κ·Έ μ€ SHA-256μ μ¬μ©ν μνΈν λ°©λ²μ Javaλ‘ μ§μ ꡬνν΄ λ³΄λλ‘ νκ² μ΅λλ€.
λ³Έλ‘ μ λ€μ΄κ°κΈ°μ μμ SHA-256 μκ³ λ¦¬μ¦μ΄ 무μμΈμ§ λ€μ μκΈ°μν€κ³ λμ΄κ°κ² μ΅λλ€.
SHA(Secure Hash Algorithm) : μμ ν ν΄μ μκ³ λ¦¬μ¦
SHA μκ³ λ¦¬μ¦μ΄λ MD4 ν΄μ ν¨μμ κΈ°μ΄νμ¬ λ§λ€μ΄μ§ μκ³ λ¦¬μ¦μΌλ‘ μλ‘ κ΄λ ¨λ μνΈνμ ν΄μ ν¨μλ€μ λͺ¨μμ λ§ν©λλ€. SHA ν¨μκ΅°μ μνλ μ΅μ΄μ ν¨μλ SHA-0, κ·Έ ν λ°νλ SHA ν¨μλ₯Ό SHA-1, κ·Έ ν 4μ’ λ₯μ λ³νλ ν¨μλ₯Ό SHA-2(SHA-224, SHA-256, SHA-384, SHA-512)κ° μμ΅λλ€.
SHA-1μ SHA ν¨μ μ€ κ°μ₯ λ§μ΄ μ°μ΄λ©°, TLS, SSL, IPSec λ± λ§μ 보μ νλ‘ν μ½κ³Ό νλ‘κ·Έλ¨μμ μ¬μ©λ©λλ€. κ·Έλ¬λ SHA-0, SHA-1μ ν΄μ μΆ©λμ΄ λ°μνμ¬ μ μ°¨μ μΌλ‘ μ¬μ©μ μ€μ¬κ°λ μΆμΈμ λλ€.
** SHA-1 : ν΄μκ°μΌλ‘ 160bitλ₯Ό μΆλ ₯
** ν΄μμΆ©λ : μλ‘ λ€λ₯Έ λκ°μ μ λ ₯κ°μ λν΄ λμΌν μΆλ ₯μ λ΄λ μν©
μμ
SHA1("The quick brown fox jumps over the lazy dog")
= 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
ν΄μκ°μ λμ¬ν ν¨κ³Ό λλ¬Έμ λ©μμ§κ° λ¨ 1λΉνΈλΌλ λ°λμ΄λ κ·Έ κ²°κ³Όλ μμ ν λ°λ μ μμ΅λλ€. μλμ μμλ μμ μμ μμ λ§μ§λ§μ λ§μΉ¨ν(.)λ₯Ό μ°μ κ²μ λλ€.
SHA1("The quick brown fox jumps over the lazy dog.")
= 408d94384216f890ff7a0c3528e8bed1e0b01621
SHA-256 Java μμ
μλ°μμ SHA μκ³ λ¦¬μ¦μ ꡬννκΈ° μν΄μλ java.security.MessageDigest ν΄λμ€λ₯Ό μ¬μ©νμ¬ κ΅¬νν©λλ€.
MessageDigest κ°μ²΄μ getInstance λ©μλλ₯Ό ν΅ν΄ μλμ μκ³ λ¦¬μ¦μ μ¬μ©ν μ μμ΅λλ€.
μΆμ² : https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#MessageDigest
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(message.getBytes());
md.digest();
getInstance(String algorithm)μ μ λ ₯ν ν΄μ μκ³ λ¦¬μ¦μ μννλ MessageDigest κ°μ²΄λ₯Ό μμ±νλ λ©μλμ λλ€. νλΌλ―Έν°λ‘ λ°λ μκ³ λ¦¬μ¦μ NoSuchAlgorithmException λλ¬Έμ try~catchλ‘ κ°μΈμ€μΌ ν©λλ€.
update(byte[] input)μ κ°μ²΄ λ΄μ μ μ₯λ digest κ°μ ν΄μ±ν©λλ€. inputμλ μνΈννκ³ μΆμ ν μ€νΈλ₯Ό λ°μ΄νΈ λ°°μ΄λ‘ λ£μ΅λλ€.
digest()λ update()λ₯Ό μ€ννμ¬, ν΄μ κ³μ° μλ£ ν κ²°κ³Όκ°μ λ°ννλ λ©μλμ λλ€.
μ΄λ κ² μνΈνν ν΄μ κ²°κ³Όλ λ°μ΄νΈ λ°°μ΄λ‘ 리ν΄λλ―λ‘ 16μ§μλ‘ λ³ννλ μμ μ κ±°μ³μΌ ν©λλ€.
StringBuilder builder = new StringBuilder();
for(byte b : bytes){
builder.append(String.format(%02x", b));
}
return builder.toString();
λΆλ³κ°μ²΄μΈ String κ°μ²΄ λμ StringBuilderλ₯Ό μ¬μ©νμ¬ λ¬Έμμ΄μ λ°λ³΅λ¬Έμ ν΅ν΄ λ¬Έμμ΄μ λ³κ²½ν μ μλλ‘ ν©λλ€.
μ λ ₯κ°μΈ byte[] λ°°μ΄μ μμλ₯Ό νλμ© λ°λ³΅λ¬Έμ ν΅ν΄ StringBuilderμ 16μ§μλ‘ λ£μ΅λλ€.
(%02xλ 2μ리 Hex StringμΌλ‘ μΆλ ₯ν©λλ€.)
ν΄λΉ λ©μλλ₯Ό μ¬μ©ν΄ 보면 μλμ κ°μ κ²°κ³Όκ° μΆλ ₯λ©λλ€.
SHA 256 μ 256bitμ λ¬Έμμ΄μ λλ€.
16μ§μ νλλΉ 4bitμ΄λ―λ‘ μ΄ 64κ°μ 16μ§μλ‘ μ΄λ£¨μ΄μ§ κ²°κ³Όκ°μ΄ μΆλ ₯λ©λλ€.