HashCode 是驗證資料是否被串改常用的驗證值,因為原始字串如果被修改了,重新再取得的 HashCode 就會不一樣

以下是一個簡單取得 SHA-256 值的方法

String data = "Encrypt this String in SHA256";
            
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(data.getBytes(StandardCharsets.UTF_8));
            
System.out.println(Base64.getEncoder().encodeToString(hash));

但在單純只做 SHA-256 的狀況下,如果我攔劫該資料後只要一同修改原始資料及 HashCode ,驗證的結果還是一樣會是正確的

所以通常單純使用 SHA-256 加密驗證通常會多加一個 Seed,也就是雙方才知道的密碼,在加密成 HashCode 時需加入該密碼才會產生一樣的 HashCode

以下則是一個加入 Seed 值的 SHA-256

            String keyAlgorithms = "HmacSHA256";
            int keyLength = 256;
            String keySeed = "Key Seed";
            
            KeyGenerator keyGen = KeyGenerator.getInstance(keyAlgorithms);
            keyGen.init(keyLength);
            
            SecureRandom random = new SecureRandom();
            random.setSeed(keySeed.getBytes());
            keyGen.init(random);
            
            Key key = keyGen.generateKey();
            
            Mac mac = Mac.getInstance(keyAlgorithms);
            mac.init(key);
            
            String data = "Encrypt this String in SHA256";
            
            byte[] hashMac = mac.doFinal(data.getBytes());
            
            System.out.println(Base64.getEncoder().encodeToString(hashMac));

arrow
arrow
    全站熱搜

    taurus770423 發表在 痞客邦 留言(0) 人氣()