首頁 後端開發 php教程 php 以openssl為基礎實作的的加密解密方法

php 以openssl為基礎實作的的加密解密方法

Jul 12, 2017 am 10:03 AM
openssl php 加密解密

openssl OpenSSL簡介
SSL是Secure Socket Layer(安全通訊端協定)的縮寫,可以在Internet上提供秘密性傳輸。 Netscape公司在推出第一個網頁瀏覽器的同時,提出了SSL協定標準,目前已有3.0版本。 SSL採用公開金鑰技術。其目標是確保兩個應用間通訊的保密性和可靠性,可在伺服器端和用戶端同時實現支援。目前,利用公開密鑰技術的SSL協議,已成為Internet上保密通訊的工業標準。安全通訊端協定能使用戶/伺服器應用程式之間的通訊不被攻擊者竊聽,並且始終對伺服器進行認證,還可選擇對使用者進行認證。 SSL協定要求建立在可靠的傳輸層協定(TCP)之上。 SSL協定的優點在於它是與應用層協定獨立無關的,高層的應用層協定(例如:HTTP,FTP,TELNET等)能透明地建立於SSL協定之上。 SSL協定在應用層協定通訊前就已經完成加密演算法、通訊金鑰的協商及伺服器認證工作。在此之後應用層協定所傳送的資料都會被加密,從而確保通訊的私密性。透過以上敘述,SSL協定提供的安全頻道有以下三個特性: 1.資料的保密性 資訊加密就是把明碼的輸入檔用加密演算法轉換成加密的檔案以實現資料的保密。加密的過程需要用到密匙來加密資料然後再解密。沒有了金鑰,就無法解開加密的資料。資料加密之後,只有密匙要用一個安全的方法傳送。加密過的資料可以公開地傳送。 2.資料的一致性 加密也能確保資料的一致性。例如:訊息驗證碼(MAC),能夠校驗用戶提供的加密訊息,接收者可以用MAC來校驗加密數據,保證數據在傳輸過程中沒有被篡改過。 3.安全驗證 加密的另一個用途是用來作為個人的標識,使用者的密匙可以作為他的安全驗證的標識。 SSL是利用公開金鑰的加密技術(RSA)來作為用戶端與伺服器端在傳送機密資料時的加密通訊協定。
什麼是OpenSSL
眾多的密碼演算法、公鑰基礎設施標準以及SSL協議,或許這些有趣的功能會讓你產生實現所有這些演算法和標準的想法。果真如此,在對你表示敬佩的同時,還是忍不住提醒你:這是一個令人望而生畏的過程。這項工作不再是簡單的讀懂幾本密碼學專著和協議文檔那麼簡單,而是要理解所有這些演算法、標準和協議文檔的每一個細節,並用你可能很熟悉的C語言字元一個一個去實現這些定義和過程。我們不知道你將需要多少時間來完成這項有趣而可怕的工作,但肯定不是一年兩年的問題。
首先,應該感謝Eric A. Young和Tim J. Hudson,他們自1995年開始編寫後來具有巨大影響的OpenSSL軟體包,更令我們高興的是,這是一個沒有太多限制的開放原始碼的軟體包,這使得我們可以利用這個軟體包做很多事情。 Eric A. Young 和Tim J. Hudson是加拿大人,後來由於寫OpenSSL功成名就之後就到大公司裡賺大錢去了。 1998年,OpenSSL專案小組接手了OpenSSL的開發工作,並推出了OpenSSL的0.9.1版,到目前為止,OpenSSL的演算法已經非常完善,對SSL2.0、SSL3.0以及TLS1.0都支援。
OpenSSL採用C語言作為開發語言,這使得OpenSSL具有優秀的跨平台性能,這對於廣大技術人員來說是一件非常美妙的事情,可以在不同的平台使用同樣熟悉的東西。 OpenSSL支援Linux、Windows、BSD、Mac、VMS等平台,這使得OpenSSL具有廣泛的適用性。不過,對於目前新成長的C++程式設計師,可能對於C語言的程式碼不是很習慣,但習慣C語言總比使用C++重新寫一個跟OpenSSL相同功能的軟體包輕鬆不少。
OpenSSL整個軟體包大概可以分成三個主要的功能部分:密碼演算法庫、SSL協定庫以及應用程式。 OpenSSL的目錄結構自然也是圍繞這三個功能部分進行規劃的。
作為一個基於密碼學的安全開發包,OpenSSL提供的功能相當強大和全面,囊括了主要的密碼演算法、常用的金鑰和憑證封裝管理功能以及SSL協議,並提供了豐富的應用程式供測試或其它目的使用。
1.對稱加密演算法
OpenSSL總共提供了8種對稱加密演算法,其中7種是分組加密演算法,僅有的一種流加密演算法是RC4。這7種分組加密演算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支援電子密碼本模式(ECB)、加密分組連結模式(CBC)、加密回饋模式(CFB)和輸出回饋模式(OFB)四種常用的分組密碼加密模式。其中,AES使用的加密回饋模式(CFB)和輸出回饋模式(OFB)分組長度是128位,其它演算法使用的則是64位。事實上,DES演算法裡面不只是常用的DES演算法,還支援三個金鑰和兩個金鑰3DES演算法。
2.非對稱加密演算法
OpenSSL總共實現了4種非對稱加密演算法,包括DH演算法、RSA演算法、DSA演算法和橢圓曲線演算法(EC)。 DH演算法一般用戶金鑰交換。 RSA演算法既可以用於金鑰交換,也可以用於數位簽名,當然,如果你能夠忍受其緩慢的速度,那麼也可以用於資料加密。 DSA演算法則一般只用於數位簽章。
3.資訊摘要演算法
OpenSSL實作了5種資訊摘要演算法,分別是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。 SHA演算法事實上包含了SHA和SHA1兩種資訊摘要演算法,此外,OpenSSL也實作了DSS標準中規定的兩種資訊摘要演算法DSS和DSS1。
4.金鑰和憑證管理
金鑰和憑證管理是PKI的一個重要組成部分,OpenSSL為之提供了豐富的功能,支援多種標準。
首先,OpenSSL實作了ASN.1的憑證和金鑰相關標準,提供了對憑證、公鑰、私鑰、憑證要求以及CRL等資料物件的DER、PEM和BASE64的編解碼功能。 OpenSSL提供了產生各種公開金鑰對和對稱金鑰的方法、函數和應用程序,同時提供了對公鑰和私鑰的DER編解碼功能。並實作了私鑰的PKCS#12和PKCS#8的編解碼功能。 OpenSSL在標準中提供了對私鑰的加密保護功能,使得金鑰可以安全地進行儲存和分發。
在此基礎上,OpenSSL實作了憑證的X.509標準編解碼、PKCS#12格式的編解碼以及PKCS#7的編解碼功能。並提供了一個文字資料庫,支援憑證的管理功能,包括憑證金鑰產生、請求產生、憑證簽發、撤銷和驗證等功能。
事實上,OpenSSL提供的CA應用程式就是一個小型的憑證管理中心(CA),實現了憑證所簽發的整個流程和憑證管理的大部分機制。
5.SSL和TLS協定
OpenSSL實作了SSL協定的SSLv2和SSLv3,支援了其中絕大部分演算法協定。 OpenSSL也實作了TLSv1.0,TLS是SSLv3的標準化版,雖然差異不大,但畢竟有許多細節不盡相同。
雖然已經有眾多的軟體實現了OpenSSL的功能,但是OpenSSL裡面實現的SSL協定能夠讓我們對SSL協定有一個更加清楚的認識,因為至少存在兩點:一是OpenSSL實現的SSL協定是開放原始碼的,我們可以追究SSL協議實現的每一個細節;二是OpenSSL實現的SSL協議是純粹的SSL協議,沒有跟其它協議(如HTTP)協議結合在一起,澄清了SSL協議的本來面目。
6.應用程式
OpenSSL的應用程式已經成為了OpenSSL重要的一個組成部分,其重要性恐怕是OpenSSL的開發者開始沒有想到的。現在OpenSSL的應用中,很多都是基於OpenSSL的應用程式而不是其API的,如OpenCA,就是完全使用OpenSSL的應用程式實現的。 OpenSSL的應用程式是基於OpenSSL的密碼演算法庫和SSL協定庫寫成的,所以也是一些非常好的OpenSSL的API使用範例,讀懂所有這些範例,你對OpenSSL的API使用了解就比較全面了,當然,這也是一項鍛鍊你的意志力的工作。
OpenSSL的應用程式提供了相對全面的功能,在相當多的人看來,OpenSSL已經為自己做好了一切,不需要再做更多的開發工作了,所以,他們也把這些應用程序成為OpenSSL的指令。 OpenSSL的應用程式主要包括金鑰產生、憑證管理、格式轉換、資料加密和簽章、SSL測試以及其它輔助配置功能。
7.Engine機制Engine機制的出現是在OpenSSL的0.9.6版的事情,開始的時候是將普通版本跟支援Engine的版本分開的,到了OpenSSL的0.9.7版,Engine機制整合到了OpenSSL的核心中,成為了OpenSSL不可缺少的一部分。 Engine機制目的是為了使OpenSSL能夠透明地使用第三方提供的軟體加密庫或硬體加密設備進行加密。 OpenSSL的Engine機製成功地達到了這個目的,這使得OpenSSL已經不僅僅使一個加密庫,而是提供了一個通用地加密接口,能夠與絕大部分加密庫或者加密設備協調工作。當然,要讓特定加密庫或加密設備更OpenSSL協調工作,需要寫少量的介面程式碼,但是這樣的工作量並不大,雖然還是需要一點密碼學的知識。 Engine機制的功能跟Windows提供的CSP功能目標基本上是相同的。目前,OpenSSL的0.9.7版本支援的內嵌第三方加密設備有8種,包括:CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare以及IBM 4758 CCA的硬體加密設備。現在也出現了支援PKCS#11介面的Engine接口,支援微軟CryptoAPI的介面也有人進行開發。當然,所有上述Engine介面支援不一定很全面,例如,可能支援其中一兩種公開金鑰演算法。
8.輔助功能
BIO機制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類型的IO接口,如內存訪問、文件訪問以及Socket等。這使得程式碼的重用性大幅提高,OpenSSL提供API的複雜性也降低了許多。
OpenSSL對於隨機數的產生和管理也提供了一整套的解決方法和支援API函數。隨機數的好壞是決定一個金鑰是否安全的重要前提。
OpenSSL也提供了其它的一些輔助功能,例如從口令產生金鑰的API,憑證簽發和管理中的設定檔機制等等。如果你有足夠的耐心,將會在深入使用OpenSSL的過程慢慢發現很多這樣的小功能,讓你不斷有新的驚喜。

這篇文章主要介紹了php實作基於openssl的加密解密方法,結合實例形式分析了php自訂函數實作基於openssl的加密解密操作相關技巧,需要的朋友可以參考下

本文實例講述了php實作基於openssl的加密解密方法。分享給大家供大家參考,具體如下:

透過openssl加密解密方法

1. openssl加密方法:

function encrypt($id){
  $id=serialize($id);
  $key="1112121212121212121212";
  $data['iv']=base64_encode(substr('fdakinel;injajdji',0,16));
  $data['value']=openssl_encrypt($id, 'AES-256-CBC',$key,0,base64_decode($data['iv']));
  $encrypt=base64_encode(json_encode($data));
  return $encrypt;
}
登入後複製

2. openssl解密方法:

function decrypt($encrypt)
{
  $key = '1112121212121212121212';//解密钥匙
  $encrypt = json_decode(base64_decode($encrypt), true);
  $iv = base64_decode($encrypt['iv']);
  $decrypt = openssl_decrypt($encrypt['value'], 'AES-256-CBC', $key, 0, $iv);
  $id = unserialize($decrypt);
  if($id){
    return $id;
  }else{
    return 0;
  }
}
登入後複製

以上是php 以openssl為基礎實作的的加密解密方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles