MD 5&MD 5塩値暗号化

5995 ワード

MD5. Message Digest algorithm 5,情報要約アルゴリズム圧縮性:任意長のデータ,算出したMD 5値長はいずれも固定的で計算しやすい:元のデータからMD 5値を算出するのは容易である.修正抵抗性:元のデータに対していかなる変更を行っても、1バイトだけを修正しても、得られたMD 5値には大きな違いがあり、強い衝突抵抗があります.2つの異なるデータを見つけて、同じMD 5値を持つのは非常に困難です.
塩添加:乱数とMD 5生成文字列を生成することで組み合わせる・データベースはMD 5値とsalt値を同時に記憶する.妥当性の検証はsaltでMD 5を行えばよい
MD5
   public static void main(String[] args) {
        String s=DigestUtils.md5Hex("123456");
        System.out.println(s);
    }

単純にユーザーパスワードをMD 5でデータベースに保存するリスクはありますが、世の中にはMD 5が暴力的に衝突するツールが多く、暴力的に解読しやすいからです.
MD 5+塩
しゅどうえん
	public static void main(String[] args) {
        String s=Md5Crypt.apr1Crypt("123456".getBytes());//     8   
        System.out.println(s);
        String ss=Md5Crypt.apr1Crypt("123456".getBytes(),"tao");//    
        System.out.println(ss);
        //$apr1$tao$uvVoCPk5qvFmoitagFQAz.
        //$apr1$tao$uvVoCPk5qvFmoitagFQAz.
    }

BCryptPasswordEncoder
	public static void main(String[] args) {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        String encode = passwordEncoder.encode("123456");
        System.out.println(encode);
        System.out.println(passwordEncoder.matches("123456",encode));
    }

ここで暗号化フィールドが同じ場合に得られる暗号化値は異なります.BCryptPasswordEncoderがencode符号化を使用するとランダム塩が自動的に生成されるので、暗号化されたデータが正しいかどうかを判断するには、BCryptPasswordEncoderのmatchesを復号する必要があります.BCryptPasswordEncoderがencodeを使用して生成した暗号化データにはランダム塩が含まれているためです.ではmatches復号時に暗号化データのルールに従ってランダム塩を取り出すと正しいかどうか判断できます!
手動で塩を加えるのは煩雑で、データベースの中でまたランダムな塩を保存する必要があって、Springが提供するBCryptPasswordEncoderを採用して塩を加える暗号化を行うことを提案します