簡體   English   中英

使用Java用來加密和解密密碼的API和算法

[英]What API and algorithm to be used to encrypt and decrypt a password using java

我目前正在使用Java創建應用程序,我用Java搜索了密碼加密,但是結果是如此巨大,以至於我感到不知所措。 如何使用Java加密和解密密碼? 加密和解密密碼的最佳實踐是什么? 我猜MD5不是一種方法,因為它是一種單向哈希。 我使用struts2作為框架,想知道它們是否提供密碼加密

更新時間

試試JBCrypt:

String password = "MyPassword123";
String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12));
System.out.println(hashed);  // $2a$12$QBx3/kI1SAfwBDFOJK1xNOXK8R2yC7vt2yeIYusaqOisYbxTNFiMy

從此處下載jBCrypt-0.3 ,有關更多詳細信息,請查看README文件。

我也不建議使用MD5,因為它已經壞了。 可以使用MessageDigest代替使用SHA512的安全哈希方法。 下面的代碼我在我的一個項目中使用,它可以正常工作

public String encode(String password, String saltKey)
        throws NoSuchAlgorithmException, IOException {

    String encodedPassword = null;
    byte[] salt = base64ToByte(saltKey);

    MessageDigest digest = MessageDigest.getInstance("SHA-512");
    digest.reset();
    digest.update(salt);

    byte[] btPass = digest.digest(password.getBytes("UTF-8"));
    for (int i = 0; i < ITERATION_COUNT; i++) {
        digest.reset();
        btPass = digest.digest(btPass);
    }

    encodedPassword = byteToBase64(btPass);
    return encodedPassword;
}

private byte[] base64ToByte(String str) throws IOException {
    BASE64Decoder decoder = new BASE64Decoder();
    byte[] returnbyteArray = decoder.decodeBuffer(str);
    if (log.isDebugEnabled()) {
        log.debug("base64ToByte(String) - end");
    }
    return returnbyteArray;
}

好吧,據我所知,我們遵循以下算法來保護密碼。

  1. MD5-
  2. PBKDF2-
  3. SHA-
  4. BCrypt和SCrypt-

在BCrypt和SCrypt中,更安全的方法是密碼安全。

有一個很好的項目致力於解決Java中的問題。 本質上,它提供了兩種加密用戶密碼的方式:-MD5
-SHA1

看一下鏈接: jasypt

對我來說,我認為MD5是最好的方法,如果用戶忘記了密碼,則無需解密密碼,您可以給他一種生成新密碼的方法,並且對於登錄,您可以只比較現有的哈希值在數據庫中,由用戶輸入

始終使用 單向哈希算法。

我會說用MD5哈希去。 在數據庫中存儲密碼時,請使用MD5哈希。 這樣,如果您將密碼設置為pass ,則在哈希處理之后,它將被存儲為asjasdfklasdjf789asdfalsdfashdflasdf (32個字符)。

如您所說,您還想解密密碼。 我會說不要那樣做 在對照數據庫檢查密碼時,您可以做的是對密碼進行哈希處理,然后將該字符串與數據庫中的字符串進行比較。

if (DoHashMD5(myPass).equals(rs.getString(2))) {
    System.out.print("You are registered user!!!");
} else {
    System.out.print("Invalid user!!!");
}

rs.getString(2)將是您的查詢參數。

暫無
暫無

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

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