我不想使用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