在线文档教程

加密类 | Encrypt Class

Encrypt Class

加密类提供双向数据加密。它使用加密类运行所需的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的数据(字符串) - 加密密钥
返回:加密的字符串
返回类型:

  • $ stringstring) - 要加密的数据

返回:加密的字符串

返回类型:字符串

执行数据加密并将其作为字符串返回。例:

$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) - 加密密钥
返回:纯文本字符串
返回类型:

  • $ stringstring) - 要解密的字符串

返回:纯文本字符串

返回类型:字符串

解密一个编码的字符串。例:

$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

  • $ cipherint) - 有效的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

  • $ modeint) - 有效的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(字符串) - 加密密钥
返回:新加密的字符串
返回类型:

  • $ stringstring) - 要加密的字符串

返回:新加密的字符串

返回类型:字符串

使您能够重新编码最初使用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,并且假定情况是这样,除非被这个参数覆盖。** $密钥**不适用加密密钥。如上所述,它通常在配置文件中指定。