프론트에서 사용자가 id와 password를 입력하고 로그인 버튼을 누른다.
만약 프론트에서 password가 암호화되지 않은 상태로 서버로 전송된다면
나쁜 사람들이 네트워크 상에서 지나가는 packet을 캡처하여 password를 확인할 수 있다.
이를 '스니핑(sniffing)'이라고 부르는데
스니핑을 방지하기 위해서는 프론트에서 서버로 password를 암호화해서 전송해야 한다.
암호화하는 방식은 여러 가지가 있는데 여기서는 SHA256 방식을 다뤄보려고 한다.
SHA256는 단방향 암호화 방식이기 때문에 복호화할 수 없다.
그렇기 때문에 로그인할 때 입력받은 비밀번호를 암호화해서 기존에 암호화된 비밀번호화 일치하는지 확인해야 한다.
아래의 코드는 코틀린에서 문자열을 SHA256으로 암호화하는 코드이다.
object SHA256 {
fun encryptPassword(password: String): String {
val encoder = MessageDigest.getInstance("SHA-256")
val byteArray = encoder.digest(password.toByteArray())
val encryptedPassword = StringBuffer()
for (byte in byteArray) {
val hashedByte = (byte.and(0xff.toByte()) + 0x100).toString(16)
if (hashedByte.length > 2)
encryptedPassword.append(hashedByte.substring(1))
else
encryptedPassword.append(hashedByte)
}
return encryptedPassword.toString()
}
}