?
This document uses PHP Chinese website manual Release
加密類提供雙向數(shù)據(jù)加密。它使用加密類運行所需的Mcrypt PHP擴展進行加密。
重要
這個庫已被DEPRECATED,只為保持向后兼容性。請使用新的加密庫。
使用加密庫
設(shè)置你的鑰匙
消息長度
初始化類
類參考
甲密鑰是一條信息,其控制的密碼處理,并且允許將要被解碼的加密字符串。實際上,您選擇的密鑰將提供解密使用該密鑰加密的數(shù)據(jù)的唯一方法,因此您不僅必須仔細選擇密鑰,而且如果您打算將其用于持久性數(shù)據(jù),則絕對不能更改密鑰。
不用說,你應(yīng)該小心地保護你的鑰匙。如果有人能夠訪問您的密鑰,數(shù)據(jù)將很容易解碼。如果你的服務(wù)器不完全在你的控制之下,那么確保關(guān)鍵的安全是不可能的,所以你可能需要仔細思考,然后將它用于需要高度安全性的任何事情,比如存儲信用卡號碼。
為了最大限度地利用加密算法,您的密鑰長度應(yīng)為32個字符(256位)。關(guān)鍵字應(yīng)該像隨機字符串一樣,可以用數(shù)字和大寫和小寫字母進行調(diào)整。你的鑰匙應(yīng)該不會是一個簡單的文本字符串。為了加密安全,它需要盡可能隨機。
您的密鑰可以存儲在application / config / config.php中,或者您可以設(shè)計自己的存儲機制并在編碼/解碼時動態(tài)傳遞密鑰。
要將你的密鑰保存到你的application / config / config.php中,打開該文件并設(shè)置:
$config['encryption_key'] = "YOUR KEY";
知道加密函數(shù)產(chǎn)生的編碼信息將比原始信息長2.6倍左右,這一點很重要。例如,如果加密字符串“我的超級秘密數(shù)據(jù)”(長度為21個字符),則最終將得到一個大約55個字符的編碼字符串(我們說“粗略”,因為編碼的字符串長度以64為增量位集群,所以它不完全是線性的)。選擇數(shù)據(jù)存儲機制時請記住這些信息。例如,Cookie只能保存4K條信息。
像CodeIgniter中的大多數(shù)其他類一樣,Encrypt類在您的控制器中使用以下$this->load->library()
方法進行初始化:
$this->load->library('encrypt');
加載后,加密庫對象將可用:
$this->encrypt
class CI_Encryptencode($string[, $key = ''])
參數(shù): | $ string(string) - 要加密$ key的數(shù)據(jù)(字符串) - 加密密鑰 |
---|---|
返回: | 加密的字符串 |
返回類型: | 串 |
$ string(string) - 要加密的數(shù)據(jù)
$ key(字符串) - 加密密鑰
返回:加密的字符串
返回類型:字符串
執(zhí)行數(shù)據(jù)加密并將其作為字符串返回。例:
$msg = 'My secret message'; $encrypted_string = $this->encrypt->encode($msg);
如果您不想在配置文件中使用該密鑰,則可以選擇通過第二個參數(shù)傳遞加密密鑰:
$ msg ='我的秘密消息'; $ key ='super-secret-key'; $ encrypted_string = $ this-> encrypt-> encode($ msg,$ key);
decode($string[, $key = ''])
參數(shù): | $ string(string) - 解密$ key的字符串(string) - 加密密鑰 |
---|---|
返回: | 純文本字符串 |
返回類型: | 串 |
$ string(string) - 要解密的字符串
$ key(字符串) - 加密密鑰
返回:純文本字符串
返回類型:字符串
解密一個編碼的字符串。例:
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84'; $plaintext_string = $this->encrypt->decode($encrypted_string);
如果您不想在配置文件中使用該密鑰,則可以選擇通過第二個參數(shù)傳遞加密密鑰:
$ msg ='我的秘密消息'; $ key ='super-secret-key'; $ encrypted_string = $ this-> encrypt-> decode($ msg,$ key);
set_cipher($cipher)
參數(shù): | $ 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獲取可用密碼列表。
如果您想手動測試您的服務(wù)器是否支持MCrypt,則可以使用:
echo extension_loaded('mcrypt')?'是':'不';
set_mode($mode)
參數(shù): | $ mode(int) - 有效的PHP MCrypt模式常量 |
---|---|
返回: | CI_Encrypt實例(方法鏈接) |
返回類型: | CI_Encrypt |
$ mode(int) - 有效的PHP MCrypt模式常量
Returns: CI\_Encrypt instance (method chaining)
Return type: CI\_Encrypt
允許你設(shè)置Mcrypt模式。默認情況下,它使用** MCRYPT \ _MODE \ _CBC **。例:
$this->encrypt->set_mode(MCRYPT_MODE_CFB);
請訪問php.net獲取可用模式列表。
encode_from_legacy($string[, $legacy_mode = MCRYPT_MODE_ECB[, $key = '']])
參數(shù): | $ string(string) - 用于加密$ legacy_mode(int)的字符串 - 有效的PHP MCrypt密碼常量$ key(字符串) - 加密密鑰 |
---|---|
返回: | 新加密的字符串 |
返回類型: | 串 |
$ string(string) - 要加密的字符串
$ legacy_mode(int) - 有效的PHP MCrypt密碼常量
$ key(字符串) - 加密密鑰
返回:新加密的字符串
返回類型:字符串
使您能夠重新編碼最初使用CodeIgniter 1.x加密的數(shù)據(jù),以便與CodeIgniter 2.x中的加密庫兼容。如果您已永久存儲加密的數(shù)據(jù)(如文件或數(shù)據(jù)庫)并位于支持Mcrypt的服務(wù)器上,則只需要使用此方法?!拜p”使用加密,如加密的會話數(shù)據(jù)或暫時加密的flashdata不需要您的干預(yù)。但是,現(xiàn)有的加密會話將被破壞,因為在2.x之前加密的數(shù)據(jù)將不會被解碼。
重要
為什么只有一種方法對數(shù)據(jù)進行重新編碼,而不是維護編碼和解碼的傳統(tǒng)方法?為了提高性能和安全性,Encrypt庫中的算法在CodeIgniter 2.x中得到了改進,我們不希望繼續(xù)使用舊方法。如果您愿意,您當(dāng)然可以擴展加密庫,并將新方法替換為舊的方法,并保持與CodeIgniter 1.x加密數(shù)據(jù)的無縫兼容性,但這是決定開發(fā)人員應(yīng)謹慎謹慎地做出的決定。
$ new_data = $ this-> encrypt-> encode_from_legacy($ old_encrypted_string);
參數(shù)默認描述** $ orig \ _data ** n / a來自CodeIgniter 1.x的加密庫的原始加密數(shù)據(jù)** $ legacy \ _mode ** MCRYPT \ _MODE \ _ECB用于生成原始加密數(shù)據(jù)的Mcrypt模式。CodeIgniter 1.x的默認值是MCRYPT \ _MODE \ _ECB,并且假定情況是這樣,除非被這個參數(shù)覆蓋。** $密鑰**不適用加密密鑰。如上所述,它通常在配置文件中指定。