php7.1加密解密 openssl_encrypt 替代mcrypt

1 概況

php7.1發(fā)布后新特性吸引了不少PHPer罚斗,大家都在討論新特性帶來的好處與便利壁榕。但是從php7.0 升級(jí)到 php7.1 廢棄了一個(gè)在過去普遍應(yīng)用的擴(kuò)展(mcrypt擴(kuò)展)溢吻。官方提供了相應(yīng)的解決提示展箱,卻沒有提供更詳細(xì)的解決辦法沼溜。于是坑來了….

2 解決

php手冊(cè)目前缺少“ openssl_encrypt ”和“ openssl_decrypt ”功能的文檔漏麦,所以花了我一段時(shí)間來完成我需要做的工作驹沿,以使這些功能可以替代mcrypt

2.1 首先艘策,您將需要生成一個(gè)用作256位加密密鑰的偽隨機(jī)字節(jié)串,請(qǐng)求的長度將為32(32位= 256位)渊季。
$encryption_key_256bit = base64_encode(openssl_random_pseudo_bytes(32));
2.2 現(xiàn)在我們有了關(guān)鍵朋蔫,我們將創(chuàng)建加密功能。我們將把要編碼的數(shù)據(jù)和我們的密鑰傳遞給該函數(shù)却汉。除了我們的密鑰驯妄,還有一個(gè)二次隨機(jī)字符串,我們將創(chuàng)建和使用稱為 初始化向量 (IV)合砂,有助于加強(qiáng)加密青扔。
function my_encrypt($data, $key) {
    // Remove the base64 encoding from our key
    $encryption_key = base64_decode($key);
    // Generate an initialization vector
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    // Encrypt the data using AES 256 encryption in CBC mode using our encryption key and initialization vector.
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);
    // The $iv is just as important as the key for decrypting, so save it with our encrypted data using a unique separator (::)
    return base64_encode($encrypted . '::' . $iv);
}
2.3 現(xiàn)在為解密功能:
function my_decrypt($data, $key) {
      // Remove the base64 encoding from our key
      $encryption_key = base64_decode($key);
      // To decrypt, split the encrypted data from our IV - our unique separator used was "::"
      list($encrypted_data, $iv) = explode('::', base64_decode($data), 2);
      return openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv);
}

2.4 放在一起測(cè)試

//$key is our base64 encoded 256bit key that we created earlier. You will probably store and define this     key in a config file.
$key = 'bRuD5WYw5wd0rdHR9yLlM6wt2vteuiniQBqE70nAuhU=';

function my_encrypt($data, $key) {
    // Remove the base64 encoding from our key
    $encryption_key = base64_decode($key);
    // Generate an initialization vector
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    // Encrypt the data using AES 256 encryption in CBC mode using our encryption key and initialization vector.
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);
    // The $iv is just as important as the key for decrypting, so save it with our encrypted data using a unique separator (::)
    return base64_encode($encrypted . '::' . $iv);
}

function my_decrypt($data, $key) {
    // Remove the base64 encoding from our key
    $encryption_key = base64_decode($key);
    // To decrypt, split the encrypted data from our IV - our unique separator used was "::"
    list($encrypted_data, $iv) = explode('::', base64_decode($data), 2);
    return openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv);
}

//our data to be encoded
$password_plain = 'abc123';
echo $password_plain . "<br>";

//our data being encrypted. This encrypted data will probably be going into a database
//since it's base64 encoded, it can go straight into a varchar or text database field without corruption worry
$password_encrypted = my_encrypt($password_plain, $key);
echo $password_encrypted . "<br>";

//now we turn our encrypted data back to plain text
$password_decrypted = my_decrypt($password_encrypted, $key);
echo $password_decrypted . "<br>";
2.5 上面的代碼將輸出以下內(nèi)容。請(qǐng)注意翩伪,由于我們的初始化向量微猖,每次運(yùn)行代碼時(shí),中間的加密字符串將會(huì)更改:
abc123
K3gzWkxySUd6VkgvQTNJUUtZMjV2UT09Ojpia3sh1zglO3DYodw84855
abc123
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缘屹,一起剝皮案震驚了整個(gè)濱河市凛剥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轻姿,老刑警劉巖犁珠,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逻炊,死亡現(xiàn)場離奇詭異,居然都是意外死亡犁享,警方通過查閱死者的電腦和手機(jī)余素,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饼疙,“玉大人溺森,你說我怎么就攤上這事慕爬∫っ校” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵医窿,是天一觀的道長磅甩。 經(jīng)常有香客問我,道長姥卢,這世上最難降的妖魔是什么卷要? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮独榴,結(jié)果婚禮上僧叉,老公的妹妹穿的比我還像新娘。我一直安慰自己棺榔,他們只是感情好瓶堕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著症歇,像睡著了一般郎笆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忘晤,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天宛蚓,我揣著相機(jī)與錄音,去河邊找鬼设塔。 笑死凄吏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闰蛔。 我是一名探鬼主播痕钢,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼钞护!你這毒婦竟也來了盖喷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤难咕,失蹤者是張志新(化名)和其女友劉穎课梳,沒想到半個(gè)月后距辆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暮刃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年跨算,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椭懊。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诸蚕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氧猬,到底是詐尸還是另有隱情背犯,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布盅抚,位于F島的核電站漠魏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妄均。R本人自食惡果不足惜柱锹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丰包。 院中可真熱鬧禁熏,春花似錦、人聲如沸邑彪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锌蓄。三九已至升筏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘸爽,已是汗流浹背您访。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剪决,地道東北人灵汪。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像柑潦,于是被迫代替她去往敵國和親享言。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容