[英]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;
}
好吧,據我所知,我們遵循以下算法來保護密碼。
在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.