今回はログイン部分の機能について解説していこうと思います。
私のアプリケーション作成で使用しているものはSHA256になります。
SHA256とは何かという事ですが「ハッシュ化」という意味で256はハッシュ化する際のbit数になります。
実際に使用しているものが以下のものになります。
ハッシュ化
//CipherUtils.java
public static String encrypt(String target) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(target.getBytes());
return Base64.encodeBase64URLSafeString(md.digest());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
encript(String 引数)で暗号化する対象を取得しハッシュ化します。
例)ユーザー新規登録の際にDBに保存する時に使用
ログイン時、DBのデータと照合する際に使用
そもそもSHA256だけではなくAES256なども存在します。何が違うかというと大きく、暗号化したものを復号化できるかどうかです。暗号化したものは復号化不可能なSHA256に対しAES256は復号化可能です。
メリット
・復号化できない
・DBのデータ漏れた際にも複合化できないハッシュ値なのでデータ漏洩の心配が少ない
復号化ができないがどうやって整合性を取るのか
⇨ログインした際に入力したパスワードなどを同じロジックでハッシュ化し、DBのデータと照らし合わせる。
実際の現場でもAESを使用しているところやSHAを使用しているところ、両方を使用しているところがあるようです。組み合わせて使用するのが正解なのかもしれません。
【振り返り】
暗号化(ハッシュ化)、復号化を勉強して思ったことは2進数、8進数、16進数をしっかり理解しているか不安になったことです。今回記事にする上でもう一度bitなどについて調べてみました。
振り返ることによって新たな気づきが得られてよかったです。