MySql 의 PASSWORD ν•¨μˆ˜λŠ” ν•΄μ‹œκ°’μ„ κ³„μ‚°ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

λΉ„λ°€λ²ˆν˜Έλ₯Ό μ²˜λ¦¬ν•  λ•Œ 많이 μ‚¬μš©λ©λ‹ˆλ‹€. μ‹€μ œ μ„œλ²„μ˜ 계정 λΉ„λ°€λ²ˆν˜Έλ„ PASSWORD ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ μ²˜λ¦¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

주의 ν•΄μ‹œκ°€ κ³„μ‚°λœ 값이 4.1.0 이전 버전과 4.1.1 이후 버전이 λ‹€λ¦…λ‹ˆλ‹€. Password Hashing in MySQL νŽ˜μ΄μ§€ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

4.1.1 이후 λ²„μ „μ—μ„œ PASSWORD ν•¨μˆ˜ κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. κ²°κ³ΌλŠ” λ¬Έμžμ—΄μž…λ‹ˆλ‹€.

MYSQL> select password('hello');

κ²°κ³Ό *6B4F89A54E2D27ECD7E8DA05B4AB8FD9D1D8B119

PASSWORD ν•¨μˆ˜μ˜ λ™μž‘μ— λŒ€ν•œ λ‚΄μš©μ„ HASHING ALGORITHM IN MYSQL PASSWORD() νŽ˜μ΄μ§€μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„ 링크 νŽ˜μ΄μ§€μ˜ λ‚΄μš©μ—μ„œλŠ” μ•„λž˜μ™€ 같이 λ™μΌν•œ 값을 얻을 수 μžˆλ‹€κ³  ν•©λ‹ˆλ‹€.

MYSQL> select password('hello') as result
union all
select concat('*', convert(sha1(unhex(sha1('hello'))) USING utf8));

*6B4F89A54E2D27ECD7E8DA05B4AB8FD9D1D8B119 *6b4f89a54e2d27ecd7e8da05b4ab8fd9d1d8b119

password ν•¨μˆ˜λŠ” sha1 ν•΄μ‹œ 값을 λ‹€μ‹œ sha1 ν•΄μ‹œ 값을 κ³„μ‚°ν•œ 값을 λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•˜κ³ , ’*’ 을 μ•žμ— 뢙인 것과 λ™μΌν•©λ‹ˆλ‹€.

κΈ°μ‘΄ μ‹œμŠ€ν…œμ΄ MySql 둜 운영되고 μžˆμ„ λ•Œ, 이λ₯Ό λ‹€λ₯Έ DBMS둜 이관을 ν•΄μ•Όν•˜λ©΄ λ¬Έμžμ—΄μ„ κ·ΈλŒ€λ‘œ μ΄κ΄€ν•˜κ³ , PASSWORD ν•¨μˆ˜μ™€ λ™μΌν•œ λ™μž‘μ„ ν•  수 μžˆλŠ” ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ„œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

public string GenerateMySQLHash(string key)
{
    byte[] keyArray = Encoding.UTF8.GetBytes(key);
    SHA1Managed enc = new SHA1Managed();
    byte[] encodedKey = enc.ComputeHash(enc.ComputeHash(keyArray));
    StringBuilder myBuilder = new StringBuilder(encodedKey.Length);

    foreach (byte b in encodedKey)
    {
        myBuilder.Append(b.ToString("X2"));
    }

    return "*" + myBuilder.ToString();
}
GenerateMySQLHash('hello');

κ²°κ³Ό

*6B4F89A54E2D27ECD7E8DA05B4AB8FD9D1D8B119