加密类
这个加密类提供数据的双向加密。首先它使用一些随机的无顺序的逐位异或(XOR)直接交换数值的编码方案预先编译一些信息,然后再将它们放在隐蔽的类似 Mcrypt 的地方。如果这个 Mcrypt 不可用,会给您的服务器编码消息“轻巧”的加密,将会提供合理安全程度。如果这个 Mcrypt 是可以使用的,最终你可以获得一个被双重加密的字符串,这样加密的话,会使你的信息非常安全。
设置你的密钥
密钥实际上是一些会控制密码加密过程并且允许被加密的字串被解码的信息片段。实际上,你选择的密钥会提供一个唯一的方法来解密一些被加密的数据,所以你需要非常谨慎的设置你的密钥,如果你想给一些固定的数据加密的话,你最好不要更改这个密钥。
很自然,你需要非常小心的保守你的密钥。如果某人对您的密钥能够存取,那么数据将会很容易地被解码。如果您的服务器不完全在的您的控制之下而想保证数据安全是不可能的,因此您可以在使用它之前仔细地想一下要求高安全存放信用卡数字对象的方法。
为了发挥加密算法的最大优势,你的解密密钥需要被设置为 32 个字符长度(128 位)。你可以设置一个编造的随机字符串作为你的密钥,最好包括数字、大写字母、小写字母。你的密钥不能设置为一个简单的文本字符串。为了被安全可靠的加密,它也有一个随机的可能性。
你的密钥可以放在 application/config/config.php 文件中,你也可以自己设置一个存储机制用于数据的加密和解密。
为了在 application/config/config.php 文件中保存你的密钥,打开文件设置一下:
$config['encryption_key'] = "YOUR KEY";
消息长度
知道加密信息的长度会是原来函数长度的 2.6 倍是很重要的。如果你加密这个字符串“my super secret data”,它的长度是 21 个字符,所以你加密后的字符串的长度大概是 55 个字符(我们说它是粗糙的,因为编码的字符串长度增量 64 位并非是线性增长的),当你选择你的数据存储机制的时候一定要记住这一点。例如,Cookie 可以占用 4k 的数据空间。
初始化类
在 Codeigniter 中,像大多数其他的类一样,加密类也需要在你的控制器函数中用 $this->load->library 函数加载:
$this->load->library('encrypt');
一旦被加载,加密类库就可以这样使用:$this->encrypt
$this->encrypt->encode()
执行数据加密并返回一个字符串。例如:
$msg = 'My secret message';
$encrypted_string = $this->encrypt->encode($msg);
如果你不想在你的配置文件中使用一个密钥,你可以通过第二个参数随意设置你的密钥。
$msg = 'My secret message';
$key = 'super-secret-key';
$encrypted_string = $this->encrypt->encode($msg, $key);
$this->encrypt->decode()
解密一个已加密的字符串。例如:
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
$plaintext_string = $this->encrypt->decode($encrypted_string);
$this->encrypt->set_cipher();
允许你设置一个 Mcrypt 算法。默认使用 MCRYPT_RIJNDAEL_256。例如:
$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
请访问 php.net 看一下可用的算法。
如果你想手动测试一下你的服务器是否支持 Mcrypt,你可以使用:
echo ( ! function_exists('mcrypt_encrypt')) ? 'Nope' : 'Yup';
$this->encrypt->set_mode();
允许你设置一个 Mcrypt 模式。默认使用 MCRYPT_MODE_ECB。例如:
$this->encrypt->set_mode(MCRYPT_MODE_CFB);
请访问 php.net 看一下可用的模式。
$this->encrypt->sha1();
SHA1 编码函数。提供一个字符串,然后它返回一个 160 位的 Hash 信息。说明:SHA1,就像 MD5 一样不可解密。例如:
$hash = $this->encrypt->sha1('Some string');
许多 PHP 安装程序默认都支持 SHA1,所以你可以很简单的使用它的原始函数进行加密:
$hash = sha1('Some string');
如果你的服务器不支持 SHA1,你可以使用别人提供的函数。