본문 바로가기

Programing/JVM(Java, Kotlin)

숫자로 된 문자열 0으로 패딩하기...

개인정보보호를 위해 비밀번호를 DB에 직접 넣기 보다는 해싱을 해서 넣는 것을 사용하고 있었다.

MD5로 해싱을 했는데, 이상하게 DB상에 들어가 있는 길이는 제 각각이었다.

MD5 해싱은 42자리로 고정된 길이인데 말이다.

알고보았더니 해싱하는 것은 자바의 java.security.MessageDigest를 이용해서 하고 있었는데,

digest()라는 메소드가 byte[]로 반환을 해주었기에 문자열로 바꾸어야 했던 것..

public byte[] java.security.MessageDigest.digest()


StringBuffer에 append로 byte를 문자로 바꾸었는데 Integer.toHexString은 0으로 패딩을 해주지 않았다.

buf.append(Integer.toHexString((int)digest[i] & 0x00ff));

다음과 같은 방법을 사용할 수 있다.

buf.append(String.format("%02x", ((int)digest[i] & 0x00ff)));

buf.append(Integer.toString((digest[i] & 0x00ff) + 0x100, 16).substring(1));


참고.

4차원알렉스의 망각 공작소 - C# :: MD5 Hash값 만들기

초보개발자 이야기. :: JAVA : MD5 , SHA-256 해쉬 코드 얻기