我不想使用Open SSL或任何非常大的非內置庫。 我只希望能夠使用密鑰加密字符串,所以如果沒有密鑰就無法解密。使用密鑰加密字符串而不使用Open SSL的強大而簡單的方法是什麼?
順便說一下,我已經在stackoverflow做了很長時間的搜索,我已經檢查了那些unsecure ways,但我想要一些健壯的像md5(可以用密鑰解密)。
感謝
我不想使用Open SSL或任何非常大的非內置庫。 我只希望能夠使用密鑰加密字符串,所以如果沒有密鑰就無法解密。使用密鑰加密字符串而不使用Open SSL的強大而簡單的方法是什麼?
順便說一下,我已經在stackoverflow做了很長時間的搜索,我已經檢查了那些unsecure ways,但我想要一些健壯的像md5(可以用密鑰解密)。
感謝
像mcrypt東西可能是你在找什麼。它具有雙向加密功能,散列功能(如MD5)不會這樣做。
嘗試使用mcrypt進行加密的PHP5類。在這種情況下,它使用blowfish加密。您需要更改每個使用它的網站的密鑰。如果你至少不使用它,它可能會指導你編寫你自己的版本。
<?php
class Encryption
{
const CYPHER = 'blowfish';
const MODE = 'cfb';
const KEY = '7QQvcT9Ga7R6QC3';
public function encrypt($plaintext)
{
$td = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, self::KEY, $iv);
$crypttext = mcrypt_generic($td, $plaintext);
mcrypt_generic_deinit($td);
return $iv.$crypttext;
}
public function decrypt($crypttext)
{
$plaintext = '';
$td = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
$ivsize = mcrypt_enc_get_iv_size($td);
$iv = substr($crypttext, 0, $ivsize);
$crypttext = substr($crypttext, $ivsize);
if ($iv)
{
mcrypt_generic_init($td, self::KEY, $iv);
$plaintext = mdecrypt_generic($td, $crypttext);
}
return $plaintext;
}
}
?>
用法:
$encrypted_string = Encryption::encrypt('this is a test'); // Åž-\Ž「kcþ1ÿ4gî:Xƒã%
$decrypted_string = Encryption::decrypt($encrypted_string); // this is a test
大多數建議都將留下兩件事情關鍵安全加密字符串:
1:隨機數。任何安全操作模式都將採用隨機數(或「IV」),對於每個加密操作都必須有所不同。這使得攻擊者更難利用不同加密操作之間的關係來了解明文:一個簡單的例子是,使用不同的nonces加密兩次的相同明文產生不同的密文。
2:MAC。除非你是專業的密碼專家,否則無論何時進行加密,都應將其視爲必不可少的。這是一個代碼,用於檢查消息的完整性,並確保只有使用該密鑰加密的真正密文才會解密。
我強烈建議在EAX或GCM模式下使用AES;它們具有靈活的隨機數處理,並在一個包中管理加密和身份驗證,並具有良好的實證。
md5具有相當的健壯性,但僅僅因爲它__cannot__無法解密。 – 2010-04-18 21:39:37
SSL不僅僅是加密字符串,它主要是關於如何以安全的方式交換密鑰。你將如何分配鑰匙? – 2010-04-18 21:41:39