簡體   English   中英

使用 sha256 和 salt 進行 Java 加密

[英]Java encryption with sha256 and salt

我需要你的一些幫助,我有一個練習,做一個登錄程序並用 sha-256 和鹽存儲密碼,我做了一部分,但這是困難的部分。 我已經讀過,如果您使用 sha-256,則無法逆轉確定密碼的操作。 如果是真的那么我需要用什么來加密密碼,在我加密密碼后,如果密碼被加密,我如何登錄? PS:我在谷歌上搜索過。

您應該閱讀散列函數的工作原理。 哈希函數只產生一個值,這取決於您的輸入。 由於計算該值的公式對於特定的哈希函數(即 SHA-256)始終相同,因此如果您知道輸入(在您的情況下為密碼),則始終可以生成它。 因此,與密碼不同,散列函數計算的值不應被解密。

我需要用什么來加密密碼

您不必加密密碼,因為正如您所說,您無法僅通過知道存儲在數據庫中的哈希值來逆轉操作。 如果您知道純文本形式的密碼,您只能獲得訪問權限。

試試下面的示例代碼,它在我這邊運行良好

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.util.Base64;
import java.util.Base64.Encoder;
import java.util.Scanner;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import java.security.NoSuchAlgorithmException;
import java.util.Base64.Decoder;

public class Cryptography {

public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException {
    Encoder encoder = Base64.getUrlEncoder().withoutPadding();
    Decoder decoder = Base64.getUrlDecoder();
    String integritystring = "810710202108241079100KAY435788318046";
    String strSalt = "3a9IbkKNr2RjwFwGnPudHbLfA4zugj6TVcoBtlWpJl0m";
    byte[] bSalt = Base64.getMimeDecoder().decode(strSalt);
    System.out.println("Salt: " + strSalt);
    System.out.println("integritystring: " + integritystring);
    String strHash = encoder.encodeToString(Hash(integritystring, bSalt));
    System.out.println("Hash: " + strHash);
}



private static byte[] Salt() {
    SecureRandom random = new SecureRandom();
    byte salt[] = new byte[6];
    random.nextBytes(salt);
    return salt;
}

private static byte[] Hash(String password, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
    KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 65536, 128);
    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    byte[] hash = factory.generateSecret(spec).getEncoded();
    return hash;
}

}

假設您的密碼是12345678 您將對該密碼進行哈希處理並將其保存到您的程序中。 在您的登錄程序中,您從用戶那里獲取輸入,使用相同的算法對其進行散列,然后比較兩個散列后的字符串。 如果相等,則字符串相等,如果不相等,則它們不相等。 此人無法弄清楚正確的密碼是什么,而您已經對密碼進行了哈希處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM