1 教程-内容提要
1.1 CodeIgniter3.1教程——开始
1.2 加载静态内容
1.3 读取新闻条目
1.4 创建新闻条目
2 常规主题
2.1 CodeIgniter URL
2.2 控制器
2.3 保留名称
2.4 视图
2.5 模型
2.6 辅助函数
2.7 使用 CodeIgniter 类库
2.8 创建类库
2.9 使用 CodeIgniter 驱动器
2.10 创建驱动器
2.11 创建核心系统类
2.12 创建附属类
2.13 钩子 - 扩展框架核心
2.14 自动加载资源
2.15 公共函数
2.16 兼容性函数
2.17 URI 路由
2.18 错误处理
2.19 网页缓存
2.20 程序分析
2.21 以 CLI 方式运行
2.22 管理你的应用程序
2.23 处理多环境
2.24 在视图文件中使用 PHP 替代语法
2.25 安全
2.26 PHP 开发规范
3 类库参考
3.1 基准测试类
3.2 缓存驱动器
3.3 日历类
3.4 购物车类
3.5 配置类
3.6 Email 类
3.7 加密类(废弃)
3.8 加密类(新版)
3.9 文件上传类
3.10 表单验证类
3.11 FTP 类
3.12 图像处理类
3.13 输入类
3.14 Javascript 类
3.15 语言类
3.16 加载器类
3.17 迁移类
3.18 输出类
3.19 分页类
3.20 模板解析类
3.21 安全类
3.22 Session 类
3.23 HTML 表格类
3.24 引用通告类
3.25 排版类
3.26 单元测试类
3.27 URI 类
3.28 用户代理类
3.29 XML-RPC 与 XML-RPC 服务器类
3.30 Zip 编码类
4 数据库参考
4.1 数据库快速入门: 示例代码
4.2 数据库配置
4.3 连接你的数据库
4.4 查询
4.5 生成查询结果
4.6 查询辅助函数
4.7 查询构造器类
4.8 事务
4.9 数据库元数据
4.10 自定义函数调用
4.11 查询缓存
4.12 数据库工厂类
4.13 数据库工具类
4.14 数据库驱动器参考
5 辅助函数参考
5.1 数组辅助函数
5.2 验证码辅助函数
5.3 Cookie 辅助函数
5.4 日期辅助函数
5.5 目录辅助函数
5.6 下载辅助函数
5.7 邮件辅助函数
5.8 文件辅助函数
5.9 表单辅助函数
5.10 HTML 辅助函数
5.11 Inflector 辅助函数
5.12 语言辅助函数
5.13 数字辅助函数
5.14 路径辅助函数
5.15 安全辅助函数
5.16 表情辅助函数(废弃)
5.17 字符串辅助函数
5.18 文本辅助函数
5.19 排版辅助函数
5.20 URL 辅助函数
5.21 XML 辅助函数

加密类(废弃)

2017-12-03 19:57:21
linefo
565
最后编辑:linefo 于 2017-12-03 20:57:00

加密类

加密类提供了双向数据加密的方式,它依赖于 PHP 的 Mcrypt 扩展,所以要有 Mcrypt 扩展才能运行。

重要

这个类库已经废弃,保留只是为了向前兼容。请使用新的 加密类

使用加密类

设置你的密钥

密钥 是对字符串进行加密或解密的一段信息片段。实际上,你设置的密钥 是 唯一 能解密通过该密钥加密的数据,所以一定要慎重选择你的密钥, 而且如果你打算对持久数据进行加密的话,你最好不要修改密钥。

不用说,你应该小心保管好你的密钥,如果有人得到了你的密钥,那么数据就能 很容易的被解密。如果你的服务器不在你的控制之下,想保证你的密钥绝对安全 是不可能的,所以在在你使用密钥对敏感数据(例如信用卡号码)进行加密之前, 请再三斟酌。

为了最大程度的利用加密算法,你的密钥最好使用32位长度(256字节),为了 保证安全性,密钥字符串应该越随机越好,包含数字、大写和小写字符, 不应该 直接使用一个简单的字符串。

你的密钥可以保存在 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

类参考

class CI_Encrypt
encode($string[, $key = ''])
参数:
  • $string (string) -- Data to encrypt
  • $key (string) -- Encryption key
返回:

Encrypted string

返回类型:

string

执行数据加密,并返回加密后的字符串。例如:

$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);
decode($string[, $key = ''])
参数:
  • $string (string) -- String to decrypt
  • $key (string) -- Encryption key
返回:

Plain-text string

返回类型:

string

解密一个已加密的字符串。例如:

$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';

$plaintext_string = $this->encrypt->decode($encrypted_string);

如果你不想使用配置文件中的密钥,你也可以将你的密钥通过第二个可选参数传入:

$msg = 'My secret message';
$key = 'super-secret-key';

$encrypted_string = $this->encrypt->decode($msg, $key);
set_cipher($cipher)
参数:
  • $cipher (int) -- Valid PHP MCrypt cypher constant
返回:

CI_Encrypt instance (method chaining)

返回类型:

CI_Encrypt

设置一个 Mcrypt 加密算法,默认情况下,使用的是 MCRYPT_RIJNDAEL_256 ,例如:

$this->encrypt->set_cipher(MCRYPT_BLOWFISH);

访问 php.net 获取一份 可用的加密算法清单

如果你想测试下你的服务器是否支持 MCrypt ,你可以:

echo extension_loaded('mcrypt') ? 'Yup' : 'Nope';
set_mode($mode)
参数:
  • $mode (int) -- Valid PHP MCrypt mode constant
返回:

CI_Encrypt instance (method chaining)

返回类型:

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) -- String to encrypt
  • $legacy_mode (int) -- Valid PHP MCrypt cipher constant
  • $key (string) -- Encryption key
返回:

Newly encrypted string

返回类型:

string

允许你重新加密在 CodeIgniter 1.x 下加密的数据,这样可以和 CodeIgniter 2.x 的 加密类库保持兼容。只有当你的加密数据是永久的保存在诸如文件或数据库中时,并且 你的服务器支持 Mcrypt ,你才可能需要使用这个方法。如果你只是在诸如会话数据 或其他临时性的数据中使用加密的话,那么你根本用不到它。尽管如此,使用 2.x 版本 之前的加密库加密的会话数据由于不能被解密,会话会被销毁。

重要

为什么只是提供了一个重新加密的方法,而不是继续支持原有的加密方法呢? 这是因为 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 , 如果不指定该参数的话,将默认使用该方式。
$key n/a 加密密钥,这个值通常在上面所说的配置文件里。