W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
加密類提供了雙向數(shù)據(jù)加密的方式,它依賴于 PHP 的 Mcrypt 擴(kuò)展,所以要有 Mcrypt 擴(kuò)展才能運(yùn)行。
重要
這個(gè)類庫(kù)已經(jīng)廢棄,保留只是為了向前兼容。請(qǐng)使用新的 加密類 。
密鑰 是對(duì)字符串進(jìn)行加密或解密的一段信息片段。實(shí)際上,你設(shè)置的密鑰 是 唯一 能解密通過該密鑰加密的數(shù)據(jù),所以一定要慎重選擇你的密鑰, 而且如果你打算對(duì)持久數(shù)據(jù)進(jìn)行加密的話,你最好不要修改密鑰。
不用說,你應(yīng)該小心保管好你的密鑰,如果有人得到了你的密鑰,那么數(shù)據(jù)就能 很容易的被解密。如果你的服務(wù)器不在你的控制之下,想保證你的密鑰絕對(duì)安全 是不可能的,所以在在你使用密鑰對(duì)敏感數(shù)據(jù)(譬如信用卡號(hào)碼)進(jìn)行加密之前, 請(qǐng)?jiān)偃遄谩?/p>
為了最大程度的利用加密算法,你的密鑰最好使用32位長(zhǎng)度(256字節(jié)),為了 保證安全性,密鑰字符串應(yīng)該越隨機(jī)越好,包含數(shù)字、大寫和小寫字符,不應(yīng)該 直接使用一個(gè)簡(jiǎn)單的字符串。
你的密鑰可以保存在 application/config/config.php 文件中,或者使用你 自己設(shè)計(jì)的保存機(jī)制也行,然后在加解密時(shí)動(dòng)態(tài)的取出密鑰。
如果要通過文件 application/config/config.php 來保存你的密鑰,那么打開 該文件然后設(shè)置:
$config['encryption_key'] = "YOUR KEY";
有一點(diǎn)很重要,你應(yīng)該知道,通過加密方法生成的消息長(zhǎng)度大概會(huì)比原始的消息長(zhǎng) 2.6 倍。舉個(gè)例子來說,如果你要加密的字符串是 "my super secret data" ,它 的長(zhǎng)度為 21 字符,那么加密之后的字符串的長(zhǎng)度大約為 55 字符(這里之所以說 “大約” 是因?yàn)榧用茏址?64 位為單位非線性增長(zhǎng))。當(dāng)你選擇數(shù)據(jù)保存機(jī)制時(shí) 請(qǐng)記住這一點(diǎn),譬如 Cookie 只能存儲(chǔ) 4k 的信息。
正如 CodeIgniter 中的其他類一樣,在你的控制器中使用 $this->load->library() 方法來初始化加密類:
$this->load->library('encrypt');
初始化之后,加密類的對(duì)象就可以這樣訪問:
$this->encrypt
classCI_Encrypt
encode($string[, $key = ''])
參數(shù):
返回: Encrypted string
返回類型: string
執(zhí)行數(shù)據(jù)加密,并返回加密后的字符串。例如:
$msg = 'My secret message';
$encrypted_string = $this->encrypt->encode($msg);
如果你不想使用配置文件中的密鑰,你也可以將你的密鑰通過第二個(gè)可選參數(shù)傳入:
$msg = 'My secret message';
$key = 'super-secret-key';
$encrypted_string = $this->encrypt->encode($msg, $key);
decode($string[, $key = ''])
參數(shù):
返回: Plain-text string
返回類型: string
解密一個(gè)已加密的字符串。例如:
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
$plaintext_string = $this->encrypt->decode($encrypted_string);
如果你不想使用配置文件中的密鑰,你也可以將你的密鑰通過第二個(gè)可選參數(shù)傳入:
$msg = 'My secret message';
$key = 'super-secret-key';
$encrypted_string = $this->encrypt->decode($msg, $key);
set_cipher($cipher)
參數(shù):
返回: CI_Encrypt instance (method chaining)
返回類型: CI_Encrypt
設(shè)置一個(gè) Mcrypt 加密算法,默認(rèn)情況下,使用的是 MCRYPT_RIJNDAEL_256 ,例如:
$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
訪問 php.net 獲取一份 可用的加密算法清單 。
如果你想測(cè)試下你的服務(wù)器是否支持 MCrypt ,你可以:
echo extension_loaded('mcrypt') ? 'Yup' : 'Nope';
set_mode($mode)
參數(shù):
返回: CI_Encrypt instance (method chaining)
返回類型: CI_Encrypt
設(shè)置一個(gè) Mcrypt 加密模式,默認(rèn)情況下,使用的是 MCRYPT_MODE_CBC ,例如:
$this->encrypt->set_mode(MCRYPT_MODE_CFB);
訪問 php.net 獲取一份 可用的加密模式清單 。
encode_from_legacy($string[, $legacy_mode = MCRYPT_MODE_ECB[, $key = '']])
參數(shù):
返回: Newly encrypted string
返回類型: string
允許你重新加密在 CodeIgniter 1.x 下加密的數(shù)據(jù),這樣可以和 CodeIgniter 2.x 的 加密類庫(kù)保持兼容。只有當(dāng)你的加密數(shù)據(jù)是永久的保存在諸如文件或數(shù)據(jù)庫(kù)中時(shí),并且 你的服務(wù)器支持 Mcrypt ,你才可能需要使用這個(gè)方法。如果你只是在諸如會(huì)話數(shù)據(jù) 或其他臨時(shí)性的數(shù)據(jù)中使用加密的話,那么你根本用不到它。盡管如此,使用 2.x 版本 之前的加密庫(kù)加密的會(huì)話數(shù)據(jù)由于不能被解密,會(huì)話會(huì)被銷毀。
重要
為什么只是提供了一個(gè)重新加密的方法,而不是繼續(xù)支持原有的加密方法呢? 這是因?yàn)?CodeIgniter 2.x 中的加密庫(kù)不僅在性能和安全性上有所提高,而且我們 并不提倡繼續(xù)使用老版本的加密方法。當(dāng)然如果你愿意的話,你完全可以擴(kuò)展加密庫(kù), 使用老的加密方法來替代新的加密方法,無縫的兼容 CodeIgniter 1.x 加密數(shù)據(jù)。 但是作為一個(gè)開發(fā)者,作出這樣的決定還是應(yīng)該小心謹(jǐn)慎。
$new_data = $this->encrypt->encode_from_legacy($old_encrypted_string);
參數(shù) | 默認(rèn)值 | 描述 |
---|---|---|
$orig_data | n/a | 使用 CodeIgniter 1.x 加密過的原始數(shù)據(jù) |
$legacy_mode | MCRYPT_MODE_ECB | 生成原始數(shù)據(jù)時(shí)使用的 Mcrypt 加密模式,CodeIgniter 1.x 默認(rèn)使用的是 MCRYPT_MODE_ECB , 如果不指定該參數(shù)的話,將默認(rèn)使用該方式。 |
$key | n/a | 加密密鑰,這個(gè)值通常在上面所說的配置文件里。 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: