我正在使用代碼$enrypt=md5($pass)
並將$encrypt
插入數據庫。我想找出解密方法。我嘗試使用解密軟件,但它說哈希應該是正好16個字節。有沒有辦法解密它或使其成爲一個16字節的MD5散列?加密和解密md5
我的哈希看起來是這樣的:c4ca4238a0b923820dcc
我正在使用代碼$enrypt=md5($pass)
並將$encrypt
插入數據庫。我想找出解密方法。我嘗試使用解密軟件,但它說哈希應該是正好16個字節。有沒有辦法解密它或使其成爲一個16字節的MD5散列?加密和解密md5
我的哈希看起來是這樣的:c4ca4238a0b923820dcc
沒有辦法解密MD5。那麼有,但沒有合理的方式來做到這一點。這點很重要。
要檢查是否有人輸入了正確的密碼,無論用戶輸入什麼內容,都需要MD5,並查看它是否與數據庫中的內容相符。
不,沒有辦法解密MD5,因爲MD5不是密碼。但是,因爲您可能意味着它的可逆性,所以您只能記住輸入+輸出對,以便稍後查找或嘗試查找衝突。但是你不能'解密'它。 – Gumbo 2013-03-04 04:59:13
@Gumbo:MD5解密器如何工作?無論他們是否存儲關鍵值字符串,該過程都表明MD5不會使用自定義鹽,這意味着如果您到達其核心,它可以被逆轉。 – Fr0zenFyr 2013-06-14 04:52:23
這裏是把它的過於簡單的方式:5 + 5是10,但如果你只是有10你可以不知道,原來數分別爲5和5。但是,如果你知道算法(取兩個數字並把它們) ,那麼你可以反轉10得到3 + 7,它會被接受,因爲結果是相同的。 – 2013-06-14 04:55:31
哈希不能解密check this out。
如果要加密解密,請使用數據庫的雙向加密函數,如 - AES_ENCRYPT(在MySQL中)。
但我會建議CRYPT_BLOWFISH算法存儲密碼。通過crypt()
功能閱讀這 - http://php.net/manual/en/function.crypt.php和http://us2.php.net/manual/en/function.password-hash.php
對於河豚 -
crypt('String', '$2a$07$twentytwocharactersalt$');
password_hash
將在PHP 5.5中引入。
$options = [
'cost' => 7,
'salt' => 'BCryptRequires22Chrcts',
];
password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
一旦存儲的密碼,就可以檢查用戶是否再次散列並將其與存儲的值進行比較,輸入正確的密碼。
新函數'password_hash()'是一個很好的建議,但是當你傳遞自己的salt時,它會失去它的一些好處。只要讓函數生成鹽,它就會以密碼安全的方式執行。 – martinstoeckli 2013-03-04 08:46:10
如前所述,如果不嘗試類似暴力破解這樣的資源密集型,不實用和不道德的行爲,就無法解密MD5。
但是你可以使用這樣的加密/解密密碼的/ etc安全:
$input = "SmackFactory";
$encrypted = encryptIt($input);
$decrypted = decryptIt($encrypted);
echo $encrypted . '<br />' . $decrypted;
function encryptIt($q) {
$cryptKey = 'qJB0rGtIn5UB1xG03efyCp';
$qEncoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), $q, MCRYPT_MODE_CBC, md5(md5($cryptKey))));
return($qEncoded);
}
function decryptIt($q) {
$cryptKey = 'qJB0rGtIn5UB1xG03efyCp';
$qDecoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), base64_decode($q), MCRYPT_MODE_CBC, md5(md5($cryptKey))), "\0");
return($qDecoded);
}
使用encypted方法與鹽會更安全,但是這將是一個很好的下一步過去只是用一個MD5哈希。
/* you can match the exact string with table value*/
if(md5("string to match") == $res["hashstring"])
echo "login correct";
但該字符串不會是每個人都一樣,我的意思是,如果有1000個用戶的該密碼字符串或ID字符串不會相同這將是一個新的字符串爲每個用戶 – Sharif 2014-08-18 11:57:35
此問題標記爲PHP。但是很多人現在都在使用Laravel框架。它可能會在未來幫助某人。這就是爲什麼我回答Laravel。用內部函數進行加密和解密更容易。
$string = 'c4ca4238a0b923820dcc';
$encrypted = \Illuminate\Support\Facades\Crypt::encrypt($string);
$decrypted_string = \Illuminate\Support\Facades\Crypt::decrypt($encrypted);
var_dump($string);
var_dump($encrypted);
var_dump($decrypted_string);
注:一定要設置一個16,24,或32個字符的隨機字符串在config/app.php文件的 密鑰選項。否則,加密值 將不安全。
但是,您不應該使用加密和解密進行身份驗證。相反,你應該使用散列製作和檢查。
$password = Input::get('password_from_user');
$hashed = Hash::make($password); // save $hashed value
// $user is database object
// $inputs is Input from user
if(\Illuminate\Support\Facades\Hash::check($inputs['password'], $user['password']) == false) {
// Password is not matching
} else {
// Password is matching
}
你有一個鏈接,即可完成文檔地穴?可用模式,填充,密碼密鑰擴展,iv,輸出格式?如果沒有,則無法互操作或認爲加密是安全的。 [加密器](https://laravel.com/api/5.2/Illuminate/Contracts/Encryption/Encrypter.html)不足。 – zaph 2016-01-30 15:34:04
花花公子它不工作的加密是不同的東西...嘗試解密這個 – 2016-05-17 06:44:26
和解密的值應該是123 – 2016-05-17 06:45:02
你不解密MD5獲取存儲帳戶的密碼... – sachleen 2013-03-04 04:42:09
散列是單向操作,這意味着它不能被解密。但是,您可以蠻力強制散列來查找哪些輸入適用於它。 – Vulcan 2013-03-04 04:42:21
md5是一個古老而容易破解的密碼哈希機制,我建議你使用最新的密碼加密算法。 – KyelJmD 2013-03-04 04:42:47