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

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

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

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
如何防止會話固定攻擊?如何防止會話固定攻擊?Apr 28, 2025 am 12:25 AM

防止會話固定攻擊的有效方法包括:1.在用戶登錄後重新生成會話ID;2.使用安全的會話ID生成算法;3.實施會話超時機制;4.使用HTTPS加密會話數據,這些措施能確保應用在面對會話固定攻擊時堅不可摧。

您如何實施無會話身份驗證?您如何實施無會話身份驗證?Apr 28, 2025 am 12:24 AM

實現無會話身份驗證可以通過使用JSONWebTokens(JWT)來實現,這是一種基於令牌的認證系統,所有的必要信息都存儲在令牌中,無需服務器端會話存儲。 1)使用JWT生成和驗證令牌,2)確保使用HTTPS防止令牌被截獲,3)在客戶端安全存儲令牌,4)在服務器端驗證令牌以防篡改,5)實現令牌撤銷機制,如使用短期訪問令牌和長期刷新令牌。

PHP會議有哪些常見的安全風險?PHP會議有哪些常見的安全風險?Apr 28, 2025 am 12:24 AM

PHP會話的安全風險主要包括會話劫持、會話固定、會話預測和會話中毒。 1.會話劫持可以通過使用HTTPS和保護cookie來防範。 2.會話固定可以通過在用戶登錄前重新生成會話ID來避免。 3.會話預測需要確保會話ID的隨機性和不可預測性。 4.會話中毒可以通過對會話數據進行驗證和過濾來預防。

您如何銷毀PHP會議?您如何銷毀PHP會議?Apr 28, 2025 am 12:16 AM

銷毀PHP會話需要先啟動會話,然後清除數據並銷毀會話文件。 1.使用session_start()啟動會話。 2.用session_unset()清除會話數據。 3.最後用session_destroy()銷毀會話文件,確保數據安全和資源釋放。

如何更改PHP中的默認會話保存路徑?如何更改PHP中的默認會話保存路徑?Apr 28, 2025 am 12:12 AM

如何改變PHP的默認會話保存路徑?可以通過以下步驟實現:在PHP腳本中使用session_save_path('/var/www/sessions');session_start();設置會話保存路徑。在php.ini文件中設置session.save_path="/var/www/sessions"來全局改變會話保存路徑。使用Memcached或Redis存儲會話數據,如ini_set('session.save_handler','memcached');ini_set(

您如何修改PHP會話中存儲的數據?您如何修改PHP會話中存儲的數據?Apr 27, 2025 am 12:23 AM

tomodifyDataNaphPsession,startTheSessionWithSession_start(),然後使用$ _sessionToset,修改,orremovevariables.1)startThesession.2)setthesession.2)使用$ _session.3)setormodifysessessvariables.3)emovervariableswithunset()

舉一個在PHP會話中存儲數組的示例。舉一個在PHP會話中存儲數組的示例。Apr 27, 2025 am 12:20 AM

在PHP會話中可以存儲數組。 1.啟動會話,使用session_start()。 2.創建數組並存儲在$_SESSION中。 3.通過$_SESSION檢索數組。 4.優化會話數據以提升性能。

垃圾收集如何用於PHP會議?垃圾收集如何用於PHP會議?Apr 27, 2025 am 12:19 AM

PHP會話垃圾回收通過概率機制觸發,清理過期會話數據。 1)配置文件中設置觸發概率和會話生命週期;2)可使用cron任務優化高負載應用;3)需平衡垃圾回收頻率與性能,避免數據丟失。

See all articles

熱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

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

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

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

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器