©
本文档使用
php.cn手册 发布
加密类提供双向数据加密。它使用加密类运行所需的Mcrypt PHP扩展进行加密。
重要
这个库已被DEPRECATED,只为保持向后兼容性。请使用新的加密库。
使用加密库
设置你的钥匙
消息长度
初始化类
类参考
甲密钥是一条信息,其控制的密码处理,并且允许将要被解码的加密字符串。实际上,您选择的密钥将提供解密使用该密钥加密的数据的唯一方法,因此您不仅必须仔细选择密钥,而且如果您打算将其用于持久性数据,则绝对不能更改密钥。
不用说,你应该小心地保护你的钥匙。如果有人能够访问您的密钥,数据将很容易解码。如果你的服务器不完全在你的控制之下,那么确保关键的安全是不可能的,所以你可能需要仔细思考,然后将它用于需要高度安全性的任何事情,比如存储信用卡号码。
为了最大限度地利用加密算法,您的密钥长度应为32个字符(256位)。关键字应该像随机字符串一样,可以用数字和大写和小写字母进行调整。你的钥匙应该不会是一个简单的文本字符串。为了加密安全,它需要尽可能随机。
您的密钥可以存储在application / config / config.php中,或者您可以设计自己的存储机制并在编码/解码时动态传递密钥。
要将你的密钥保存到你的application / config / config.php中,打开该文件并设置:
$config['encryption_key'] = "YOUR KEY";
知道加密函数产生的编码信息将比原始信息长2.6倍左右,这一点很重要。例如,如果加密字符串“我的超级秘密数据”(长度为21个字符),则最终将得到一个大约55个字符的编码字符串(我们说“粗略”,因为编码的字符串长度以64为增量位集群,所以它不完全是线性的)。选择数据存储机制时请记住这些信息。例如,Cookie只能保存4K条信息。
像CodeIgniter中的大多数其他类一样,Encrypt类在您的控制器中使用以下$this->load->library()
方法进行初始化:
$this->load->library('encrypt');
加载后,加密库对象将可用:
$this->encrypt
class CI_Encryptencode($string[, $key = ''])
参数: | $ string(string) - 要加密$ key的数据(字符串) - 加密密钥 |
---|---|
返回: | 加密的字符串 |
返回类型: | 串 |
$ string(string) - 要加密的数据
$ key(字符串) - 加密密钥
返回:加密的字符串
返回类型:字符串
执行数据加密并将其作为字符串返回。例:
$msg = 'My secret message'; $encrypted_string = $this->encrypt->encode($msg);
如果您不想在配置文件中使用该密钥,则可以选择通过第二个参数传递加密密钥:
$ msg ='我的秘密消息'; $ key ='super-secret-key'; $ encrypted_string = $ this-> encrypt-> encode($ msg,$ key);
decode($string[, $key = ''])
参数: | $ string(string) - 解密$ key的字符串(string) - 加密密钥 |
---|---|
返回: | 纯文本字符串 |
返回类型: | 串 |
$ string(string) - 要解密的字符串
$ key(字符串) - 加密密钥
返回:纯文本字符串
返回类型:字符串
解密一个编码的字符串。例:
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84'; $plaintext_string = $this->encrypt->decode($encrypted_string);
如果您不想在配置文件中使用该密钥,则可以选择通过第二个参数传递加密密钥:
$ msg ='我的秘密消息'; $ key ='super-secret-key'; $ encrypted_string = $ this-> encrypt-> decode($ msg,$ key);
set_cipher($cipher)
参数: | $ cipher(int) - 有效的PHP MCrypt密码常量 |
---|---|
返回: | CI_Encrypt实例(方法链接) |
返回类型: | CI_Encrypt |
$ cipher(int) - 有效的PHP MCrypt密码常量
Returns: CI\_Encrypt instance (method chaining)
Return type: CI\_Encrypt
Permits you to set an Mcrypt cipher. By default it uses `MCRYPT_RIJNDAEL_256`. Example:
$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
请访问php.net获取可用密码列表。
如果您想手动测试您的服务器是否支持MCrypt,则可以使用:
echo extension_loaded('mcrypt')?'是':'不';
set_mode($mode)
参数: | $ mode(int) - 有效的PHP MCrypt模式常量 |
---|---|
返回: | CI_Encrypt实例(方法链接) |
返回类型: | CI_Encrypt |
$ mode(int) - 有效的PHP MCrypt模式常量
Returns: CI\_Encrypt instance (method chaining)
Return type: CI\_Encrypt
允许你设置Mcrypt模式。默认情况下,它使用** MCRYPT \ _MODE \ _CBC **。例:
$this->encrypt->set_mode(MCRYPT_MODE_CFB);
请访问php.net获取可用模式列表。
encode_from_legacy($string[, $legacy_mode = MCRYPT_MODE_ECB[, $key = '']])
参数: | $ string(string) - 用于加密$ legacy_mode(int)的字符串 - 有效的PHP MCrypt密码常量$ key(字符串) - 加密密钥 |
---|---|
返回: | 新加密的字符串 |
返回类型: | 串 |
$ string(string) - 要加密的字符串
$ legacy_mode(int) - 有效的PHP MCrypt密码常量
$ key(字符串) - 加密密钥
返回:新加密的字符串
返回类型:字符串
使您能够重新编码最初使用CodeIgniter 1.x加密的数据,以便与CodeIgniter 2.x中的加密库兼容。如果您已永久存储加密的数据(如文件或数据库)并位于支持Mcrypt的服务器上,则只需要使用此方法。“轻”使用加密,如加密的会话数据或暂时加密的flashdata不需要您的干预。但是,现有的加密会话将被破坏,因为在2.x之前加密的数据将不会被解码。
重要
为什么只有一种方法对数据进行重新编码,而不是维护编码和解码的传统方法?为了提高性能和安全性,Encrypt库中的算法在CodeIgniter 2.x中得到了改进,我们不希望继续使用旧方法。如果您愿意,您当然可以扩展加密库,并将新方法替换为旧的方法,并保持与CodeIgniter 1.x加密数据的无缝兼容性,但这是决定开发人员应谨慎谨慎地做出的决定。
$ new_data = $ this-> encrypt-> encode_from_legacy($ old_encrypted_string);
参数默认描述** $ orig \ _data ** n / a来自CodeIgniter 1.x的加密库的原始加密数据** $ legacy \ _mode ** MCRYPT \ _MODE \ _ECB用于生成原始加密数据的Mcrypt模式。CodeIgniter 1.x的默认值是MCRYPT \ _MODE \ _ECB,并且假定情况是这样,除非被这个参数覆盖。** $密钥**不适用加密密钥。如上所述,它通常在配置文件中指定。