1οΈβ£ ν΄μ(Hash).
ν΄μ(Hash)λ μ»΄ν¨ν° κ³Όνμμ μ£Όμ΄μ§ μ λ ₯ λ°μ΄ν°λ₯Ό κ³ μ λ ν¬κΈ°μ κ³ μ ν κ°(μΌλ°μ μΌλ‘ μ«μ)μΌλ‘ λ³ννλ κ³Όμ λλ κ·Έ κ²°κ³Ό κ°μ λ§ν©λλ€.
ν΄μλ μ£Όλ‘ λ°μ΄ν° κ²μ, λ°μ΄ν° λ¬΄κ²°μ± κ²μ¦, μνΈν λ±μ μ¬μ©λ©λλ€.
1οΈβ£ ν΄μμ κ°λ .
-
ν΄μ ν¨μ(Hash Function)
- μμμ κΈΈμ΄λ₯Ό κ°μ§ λ°μ΄ν°λ₯Ό κ³ μ λ κΈΈμ΄μ ν΄μ κ°μΌλ‘ λ³ννλ ν¨μμ λλ€.
- ν΄μ ν¨μλ λμΌν μ λ ₯μ λν΄ νμ λμΌν ν΄μ κ°μ μμ±ν΄μΌ νλ©°, μλ‘ λ€λ₯Έ μ λ ₯μ λν΄μλ κ°λ₯ν ν λ€λ₯Έ ν΄μ κ°μ μμ±ν΄μΌ ν©λλ€.
-
ν΄μ κ°(Hash Value)
- ν΄μ ν¨μλ₯Ό ν΅ν΄ μμ±λ κ³ μ λ ν¬κΈ°μ μΆλ ₯ κ°μ
λλ€.
- μ΄λ₯Ό ν΄μ μ½λ(Hash Code) λλ λ€μ΄μ μ€νΈ(Digest)λΌκ³ λ ν©λλ€.
- ν΄μ ν¨μλ₯Ό ν΅ν΄ μμ±λ κ³ μ λ ν¬κΈ°μ μΆλ ₯ κ°μ
λλ€.
2οΈβ£ ν΄μ ν¨μμ νΉμ§.
-
κ²°μ μ±(Deterministic) : λμΌν μ λ ₯μ λν΄ νμ λμΌν ν΄μ κ°μ λ°νν©λλ€.
-
ν¨μ¨μ±(Efficiency) : ν΄μ ν¨μλ μ λ ₯ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ²λ¦¬νμ¬ ν΄μ κ°μ μμ±ν΄μΌ ν©λλ€.
-
μΆ©λ μ νμ±(Collision Resistance) : μλ‘ λ€λ₯Έ λ μ λ ₯μ΄ λμΌν ν΄μ κ°μ κ°μ§ μλλ‘ ν΄μΌ ν©λλ€. νμ€μ μΌλ‘ μλ²½ν μΆ©λ μ νμ±μ λΆκ°λ₯νλ―λ‘, κ°λ₯ν μΆ©λμ μ΅μννλ κ²μ΄ μ€μν©λλ€.
-
μμ μ νμ±(Pre-image Resistance) : ν΄μ κ°μ ν΅ν΄ μν΄μ μ λ ₯ λ°μ΄ν°λ₯Ό μ μΆνλ κ²μ΄ μ΄λ ΅κ±°λ λΆκ°λ₯ν΄μΌ ν©λλ€.
-
λ λ²μ§Έ μμ μ νμ±(Second Pre-image Resitance) : νΉμ μ λ ₯κ³Ό λμΌν ν΄μ κ°μ κ°λ λ λ€λ₯Έ μ λ ₯μ μ°Ύλ λ λ€λ₯Έ μ λ ₯μ μ°Ύλ κ²μ΄ μ΄λ €μμΌ ν©λλ€.
3οΈβ£ ν΄μ ν¨μμ μ©λ.
-
λ°μ΄ν° κ²μ : ν΄μ ν μ΄λΈ(Hash Table)κ³Ό κ°μ μλ£κ΅¬μ‘°μμ λΉ λ₯Έ λ°μ΄ν° κ²μμ μν΄ μ¬μ©λ©λλ€.
-
λ°μ΄ν° λ¬΄κ²°μ± κ²μ¦ : λ°μ΄ν°κ° λ³κ²½λμ§ μμμμ νμΈνκΈ° μν΄ ν΄μ κ°μ μ¬μ©ν©λλ€. μλ₯Ό λ€μ΄, νμΌμ ν΄μ κ°μ λΉκ΅νμ¬ νμΌμ΄ μμλμ§ μμμμ νμΈν μ μμ΅λλ€.
-
μνΈν λ° λ³΄μ : ν¨μ€μλ μ μ₯, λμ§νΈ μλͺ , λ©μμ§ μΈμ¦ μ½λ(MAC) λ±μμ λ°μ΄ν°μ 무결μ±κ³Ό κΈ°λ°μ±μ 보μ₯νκΈ° μν΄μ μ¬μ©λ©λλ€.
4οΈβ£ ν΄μ ν¨μμ μ
-
SHA-256(Secure Hash Algorithm 256-bit) : 256λΉνΈμ ν΄μ κ°μ μμ±νλ μνΈν ν΄μ ν¨μμ λλ€.
-
MD5(Message Digest Algorithm 5) : 128λΉνΈμ ν΄μ κ°μ μμ±νλ ν΄μ ν¨μλ‘, νμ¬λ μΆ©λ μ νμ±μ μ·¨μ½μ± λλ¬Έμ 보μ μ©λλ‘λ κΆμ₯λμ§ μμ΅λλ€.
-
CRC32(Cyclic Redundancy Check 32-bit) : λ°μ΄ν° μ μ‘ μ€λ₯ κ²μΆμ μν΄ μ¬μ©λλ 32λΉνΈ ν΄μ ν¨μμ λλ€.
πββοΈ μ£Όμ ν¬μΈνΈ μμ½
-
ν΄μ(Hash) λ λ°μ΄ν°λ₯Ό κ³ μ λ ν¬κΈ°μ κ³ μ ν κ°μΌλ‘ λ³ννλ κ³Όμ μ λλ€.
-
ν΄μ ν¨μλ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ ν΄μ κ°μ μμ±νλ©°, μΆ©λμ μ΅μννκ³ μμμ μμΈ‘ν μ μλλ‘ μ€κ³λμ΄μΌ ν©λλ€.
-
ν΄μ ν¨μλ λ°μ΄ν° κ²μ, λ¬΄κ²°μ± κ²μ¦, μνΈν λ± λ€μν μ©λλ‘ μ¬μ©λ©λλ€.
π» ν΄μ ν¨μμ μμ μ½λ
μλλ Javaμμ SHA-256 ν΄μ ν¨μλ₯Ό μ¬μ©νμ¬ λ¬Έμμ΄μ ν΄μ κ°μ μμ±νλ μμ μ λλ€.
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Main {
public static void main(String[] args) {
String input = "Hello World!";
try {
// SHA-256 ν΄μ ν¨μ μΈμ€ν΄μ€ μμ±
MessageDigest digest = MessageDigest.getInstance("SHA-256");
// μ
λ ₯ λ¬Έμμ΄μ ν΄μ κ° κ³μ°
byte[] hash = digest.digest(input.getBytes());
// ν΄μ κ°μ 16μ§μ λ¬Έμμ΄λ‘ λ³ννμ¬ μΆλ ₯
System.out.println("Hash value: " + bytesToHex(hash));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
// λ°μ΄νΈ λ°°μ΄μ 16μ§μ λ¬Έμμ΄λ‘ λ³ννλ ν¨μ
private static String bytesToHex(byte[] bytes) {
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
}
}