當前位置:首頁 » 密碼管理 » phpopenssl加密

phpopenssl加密

發布時間: 2023-07-04 13:25:03

1. phpnow怎麼安裝ssl證書https訪問

您好!

首先進入Gworg申請SSL證書(某淘中可以找到),獲得Apache SSL證書。

如果是草根的話,需要耐心的研究了,步驟還是挺復雜的。

PHPnow是指:Apache + PHP + MySQL,所以只需根據Apache環境安裝SSL證書。

打開你集成包的文件夾,找到「/php-5.2.x-Win32/php-apache2handler.ini」這文件,隨便用記事本打開,查找

;extension=php_openssl.dll

將最前面的分號去掉,改成以下的代碼,然後保存

extension=php_openssl.dll

接著重啟一下apache哦,重啟方法:

打開PHPnow安裝根目錄,運行PnCp.cmd,輸入23後回車,就可以重啟apache (選23)

接下來可以參考教程安裝:網頁鏈接(下面代碼也可以應用)

Listen443(如果配置已經存在就不要加)

LoadMolessl_molemoles/mod_ssl.so(如果配置已經存在就不要加)
NameVirtualHost*:443(非必須,配置多個SSL站點會需要)
<VirtualHost*:443>
ServerNamewww.gworg.cn
ServerAliasgworg.cn
DocumentRoot/var/www/html
SSLEngineon
SSLProtocolall-SSLv2-SSLv3
SSLCertificateFile/etc/ssl/server.crt
SSLCertificateKeyFile/etc/ssl/server.key
SSLCertificateChainFile/etc/ssl/server.ca-bundle
</VirtualHost>

2. php 當中 openssl_private_encrypt 加密的時候 為什麼只能加密117個字元的長度的字元串,超過這個長度的字

PHP RSA使用非對稱加解密就是 密鑰/8 -11的長度。你可以使用AES/DES對稱加解密這個不限制長度

3. PHP對稱加密-AES

對稱加解密演算法中,當前最為安全的是 AES 加密演算法(以前應該是是 DES 加密演算法),PHP 提供了兩個可以用於 AES 加密演算法的函數簇: Mcrypt OpenSSL

其中 Mcrypt 在 PHP 7.1.0 中被棄用(The Function Mycrypt is Deprecated),在 PHP 7.2.0 中被移除,所以即可起你應該使用 OpenSSL 來實現 AES 的數據加解密。

在一些場景下,我們不能保證兩套通信系統都使用了相函數簇去實現加密演算法,可能 siteA 使用了最新的 OpenSSL 來實現了 AES 加密,但作為第三方服務的 siteB 可能仍在使用 Mcrypt 演算法,這就要求我們必須清楚 Mcrypt 同 OpenSSL 之間的差異,以便保證數據加解密的一致性。

下文中我們將分別使用 Mcrypt 和 OpenSSL 來實現 AES-128/192/256-CBC 加解密,二者同步加解密的要點為:

協同好以上兩點,就可以讓 Mcrypt 和 OpenSSL 之間一致性的對數據進行加解密。

AES 是當前最為常用的安全對稱加密演算法,關於對稱加密這里就不在闡述了。

AES 有三種演算法,主要是對數據塊的大小存在區別:

AES-128:需要提供 16 位的密鑰 key
AES-192:需要提供 24 位的密鑰 key
AES-256:需要提供 32 位的密鑰 key

AES 是按數據塊大小(128/192/256)對待加密內容進行分塊處理的,會經常出現最後一段數據長度不足的場景,這時就需要填充數據長度到加密演算法對應的數據塊大小。

主要的填充演算法有填充 NUL("0") 和 PKCS7,Mcrypt 默認使用的 NUL("0") 填充演算法,當前已不被推薦,OpenSSL 則默認模式使用 PKCS7 對數據進行填充並對加密後的數據進行了 base64encode 編碼,所以建議開發中使用 PKCS7 對待加密數據進行填充,已保證通用性(alipay sdk 中雖然使用了 Mcrypt 加密簇,但使用 PKCS7 演算法對數據進行了填充,這樣在一定程度上親和了 OpenSSL 加密演算法)。

Mcrypt 的默認填充演算法。NUL 即為 Ascii 表的編號為 0 的元素,即空元素,轉移字元是 "",PHP 的 pack 打包函數在 'a' 模式下就是以 NUL 字元對內容進行填充的,當然,使用 "" 手動拼接也是可以的。

OpenSSL的默認填充演算法。下面我們給出 PKCS7 填充演算法 PHP 的實現:

默認使用 NUL("") 自動對待加密數據進行填充以對齊加密演算法數據塊長度。

獲取 mcrypt 支持的演算法,這里我們只關注 AES 演算法。

注意:mcrypt 雖然支持 AES 三種演算法,但除 MCRYPT_RIJNDAEL_128 外, MCRYPT_RIJNDAEL_192/256 並未遵循 AES-192/256 標准進行加解密的演算法,即如果你同其他系統通信(java/.net),使用 MCRYPT_RIJNDAEL_192/256 可能無法被其他嚴格按照 AES-192/256 標準的系統正確的數據解密。官方文檔頁面中也有人在 User Contributed Notes 中提及。這里給出如何使用 mcrpyt 做標注的 AES-128/192/256 加解密

即演算法統一使用 MCRYPT_RIJNDAEL_128 ,並通過 key 的位數 來選定是以何種 AES 標准做的加密,iv 是建議添加且建議固定為16位(OpenSSL的 AES加密 iv 始終為 16 位,便於統一對齊),mode 選用的 CBC 模式。

mcrypt 在對數據進行加密處理時,如果發現數據長度與使用的加密演算法的數據塊長度未對齊,則會自動使用 "" 對待加密數據進行填充,但 "" 填充模式已不再被推薦,為了與其他系統有更好的兼容性,建議大家手動對數據進行 PKCS7 填充。

openssl 簇加密方法更為簡單明確,mcrypt 還要將加密演算法分為 cipher + mode 去指定,openssl 則只需要直接指定 method 為 AES-128-CBC,AES-192-CBC,AES-256-CBC 即可。且提供了三種數據處理模式,即 默認模式 0 / OPENSSL_RAW_DATA / OPENSSL_ZERO_PADDING 。

openssl 默認的數據填充方式是 PKCS7,為兼容 mcrpty 也提供處理 "0" 填充的數據的模式,具體為下:

options 參數即為重要,它是兼容 mcrpty 演算法的關鍵:

options = 0 : 默認模式,自動對明文進行 pkcs7 padding,且數據做 base64 編碼處理。
options = 1 : OPENSSL_RAW_DATA,自動對明文進行 pkcs7 padding, 且數據未經 base64 編碼處理。
options = 2 : OPENSSL_ZERO_PADDING,要求待加密的數據長度已按 "0" 填充與加密演算法數據塊長度對齊,即同 mcrpty 默認填充的方式一致,且對數據做 base64 編碼處理。注意,此模式下 openssl 要求待加密數據已按 "0" 填充好,其並不會自動幫你填充數據,如果未填充對齊,則會報錯。

故可以得出 mcrpty簇 與 openssl簇 的兼容條件如下:

建議將源碼復制到本地運行,根據運行結果更好理解。

1.二者使用的何種填充演算法。

2.二者對數據是否有 base64 編碼要求。

3.mcrypt 需固定使用 MCRYPT_RIJNDAEL_128,並通過調整 key 的長度 16, 24,32 來實現 ase-128/192/256 加密演算法。

4. php SHA256WithRSA簽名驗簽&加密解密

使用:

$pri_key ="";

$pub_key = "";

$char = '方方塊兒';//要加密的字元

$sign = $this->RsaEncrypt($char,$pri_key);//加密結果

$result = $this->RsaDecrypt($sign,$pub_key);//對加密結果進行解密

加密:

public function RsaEncrypt($str,$pri_key){

        $pi_key =openssl_pkey_get_private($pri_key);

        if(!$pi_key)return false;//秘鑰不可用

       openssl_private_encrypt($str,$encrypted,$pi_key);

       $encrypted =base64_encode($encrypted);

       return $encrypted;

}

解密:
public function RsaDecrypt($str,$pub_key){

        $pu_key =openssl_pkey_get_public($pub_key);

        if(!$pu_key)return false;//秘鑰不可用

        openssl_public_decrypt(base64_decode($str),$decrypted,$pu_key);

        return $decrypted;

}

註:開啟PHP的php_openssl擴展

5. 如何在linux使用md5對其進行加密

這里以字元串123456為例子,它的md5密文值為:
這里以1.txt為需要被加密的文件。

一、 用oppnssl md5 加密字元串和文件的方法。
1. oppnssl md5 加密字元串的方法
a.手動輸入命令及過程如下:
#openssl //在終端中輸入openssl後回車。
OpenSSL> md5 //輸入md5後回車
123456 //接著輸入123456,不要輸入回車。然後按3次ctrl+d。
123456 //123456後面的就是密文了
解釋:為何在輸入123456後不回車呢?
是因為openssl默認會把回車符當做要加密的字元串中的一個字元,所以得到的結果不同。如果你輸入123456後回車,在按2次ctrl+d。得到的結果是:
OpenSSL> md5
123456
//因為openssl不忽略回車符導致的
b.或者直接用管道命令
# echo -n 123456 | openssl md5 //必須要有-n參數,否則就不是這個結果了。

解釋:為何要加-n這個參數?
-n就表示不輸入回車符,這樣才能得到正確的結果。如果你不加-n,那麼結果和前面說的一樣為:
//因為openssl不忽略回車符導致的
2.用openssl加密文件。
#openssl md 5 -in 1.txt

##################################################3
Openssl其他相關加密的命令參數:引自:實用命令:利用openssl進行BASE64編碼解碼、md5/sha1摘要、AES/DES3加密解密 收藏
一. 利用openssl命令進行BASE64編碼解碼(base64 encode/decode)
1. BASE64編碼命令
對字元串『abc』進行base64編碼:
# echo abc | openssl base64
YWJjCg== (編碼結果)
如果對一個文件進行base64編碼(文件名t.txt):
# openssl base64 -in t.txt
2. BASE64解碼命令
求base64後的字元串『YWJjCg==』的原文:
# echo YWJjCg== | openssl base64 -d
abc (解碼結果)
如果對一個文件進行base64解碼(文件名t.base64):
# openssl base64 -d -in t.base64
二. 利用openssl命令進行md5/sha1摘要(digest)
1. 對字元串『abc』進行md5摘要計算:echo abc | openssl md5
若對某文件進行md5摘要計算:openssl md5 -in t.txt
2. 對字元串『abc』進行sha1摘要計算:echo abc | openssl sha1
若對某文件進行sha1摘要計算:openssl sha1 -in t.txt
三. 利用openssl命令進行AES/DES3加密解密(AES/DES3 encrypt/decrypt)
對字元串『abc』進行aes加密,使用密鑰123,輸出結果以base64編碼格式給出:
# echo abc | openssl aes-128-cbc -k 123 -base64
U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= (結果)
對以上結果進行解密處理:
# echo U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= | openssl aes-128-cbc -d -k 123 -base64
abc (結果)
若要從文件里取原文(密文)進行加密(解密),只要指定 -in 參數指向文件名就可以了。
進行des3加解密,只要把命令中的aes-128-cbc換成des3就可以了。
註:只要利用openssl help就可以看到更多的安全演算法了。
###############################################

二、 利用php的md5函數加密字元串
#touch a.php //創建a.php文件
#vi a.php //用vi 編輯a.php文件
將<?php echo md5(123456); ?>輸入進去後保存
#php a.php //運行a.php文件
顯示:
三、 利用md5sum命令
A.在linux或Unix上,md5sum是用來計算和校驗文件報文摘要的工具程序。一般來說,安裝了Linux後,就會有md5sum這個工具,直接在命令行終端直接運行。可以用下面的命令來獲取md5sum命令幫助 man md5sum
#md5sum –help
有個提示:「With no FILE, or when FILE is -, read standard input.」翻譯過來就是「如果沒有輸入文件選項或者文件選項為 - ,則從標磚讀取輸入內容」,即可以直接從鍵盤讀取字元串來加密。
利用md5sum加密字元串的方法
# md5sum //然後回車
123456 //輸入123456.然後按兩次ctrl+d.
顯示:
123456 紅色代表加密後的值
還可以用管道命令:
#echo -n '123123' | md5sum

或者寫成md5加密腳本,名字叫md5.sh,
將以下內容復制進腳本里:
#!/bin/bash
echo -n $1 | md5sum | awk '{print $1}'

保存後,給腳本執行許可權。
#sh md5.sh 123456
顯示:
B.其實也可以將文本放入文本文件,然後用md5sum 加密改文本,也可以得到字元串加密的值。過程如下:
#touch a.txt
#echo -n 123456 > a.txt //將123456寫進文本文件,不能丟了 –n參數,避免回車符干擾
#md5sum a.txt
顯示: a.txt

ctrl+d有兩個含義:
一是向程序發送文件輸入結束符EOF。
二是向程序發送exit退出指令。程序收到信號後具體動作是結束輸入、然後等待,還是直接退出,那就要看該程序捕獲信號後是如何操作的了。
md5sum屬於第一個含義。兩次strl+d了,第一次讀取EOF指令,再次捕獲就會當成exit指令。而shell一類的程序,會直接把ctrl+d解析為退出指令。

6. 想咨詢下php 調用中行介面: pfx文件轉為pem,用openssl_pkcs7_sign做簽名 這種方式 ,怎麼實現的,~

注意和別的語言對接的時候base64加密有差異要注意特殊字元過濾

和java對接的時候 發現java的iv欄位是byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 }類型 查了好久 最後發現PHp對應的主要 字元串就OK了如下

如果java或這安卓 用的是byte類型那麼需要注意是否需要改成 "x01x02x03x04x05x06x07x08"16進制的寫法;

有的JAVA是重寫base64,des加密後需要base64下,主要注意 加密後的字元串,按照規律,從左至右,每60個字元你添加一個空格


之前寫過一篇文章 網頁鏈接

7. PHP中2個加密擴展庫openssl mcrypt有何區別

Mcrypt擴展庫可以實現加密解密功能,就是既能將明文加密,也可以密文還原。 1.安裝PHP加密擴展Mcrypt 要使用該擴展,必須首先安裝mcrypt標准類庫,注意的是mcrypt軟體依賴libmcrypt和mhash兩個庫。 2.PHP加密擴展庫Mcrypt的演算法和加密模式 Mcrypt庫支持20多種加密演算法和8種加密模式,具體可以通過函數mcrypt_list_algorithms()和mcrypt_list_modes()來顯示,結果如下: Mcrypt支持的演算法有:cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-中國pat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes Mcrypt支持的加密模式有:cbc cfb ctr ecb ncfb nofb ofb stream 這些演算法和模式在應用中要以常量來表示,寫的時候加上前綴MCRYPT_和MCRYPT_MODE_來表示,如下面Mcrypt應用的例子: DES演算法表示為MCRYPT_DES; ECB模式表示為MCRYPT_MODE_ECB; 3.PHP加密擴展庫Mcrypt應用 先看一個例子,了解Mcrypt的工作流程,再來看看部分流程使用的函數: <?php $str = "我是李雲"; $key = "123qwe.019860905061X"; $cipher = MCRYPT_RIJNDAEL_128; $mode = MCRYPT_MODE_ECB; $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$mode),MCRYPT_RAND); echo "原文:".$str."
"; $str_encrypt = mcrypt_encrypt($cipher,$key,$str,$mode,$iv); echo "加密後的內容是:".$str_encrypt."
"; $str_decrypt = mcrypt_decrypt($cipher,$key,$str_encrypt,$mode,$iv); echo "解密後的內容:".$str_decrypt."
"; ?> 運行結果: 原文:我是李雲 加密後的內容是:??Z懍e e??? 解密後的內容:我是李雲 //手冊里的寫法: //指定初始化向量iv的大小: $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); //創建初始化向量: $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); //加密密碼: $key = "123qwe.019860905061x"; //原始內容(未加密): $text = "My name is Adam Li!"; echo $text. "
\n"; //加密後的內容: $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); echo $crypttext. "\n
"; //解密已經加密的內容: $str_decrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv); echo $str_decrypt; 註:加密和解密函數中的參數cipher、key和mode必須一一對應,否則數據不能被還原。關於MCRYPT_RAND參見筆記Linux中的隨機數文件 /dev/random /dev/urandom。 PHP的Mcrypt擴展的mcrypt_create_iv, 如果你不指定的話, 默認使用/dev/random(Linux上), 作為隨機數產生器. 這里的問題就在於/dev/random, 它的random pool依賴於系統的中斷來產生. 當系統的中斷數不足, 不夠產生足夠的隨機數, 那麼嘗試讀取的進程就會等待, 也就是會阻塞住 當20個並發請求的時候, 伺服器的中斷數不夠, 產生不了足夠的隨機數給mcrypt, 繼而導致PHP進程等待, 從而表現出, 響應時間變長 解決的辦法就是, 改用/dev/urandom, /dev/urandom也是一個產生隨機數的設備, 但是它不依賴於系統中斷。 $ rngd -r /dev/urandom -o /dev/random -t 1 用urandom的結果填充entropy池子,這樣既保證了entropy池的數量,也保證了隨機性 然而, 為什麼PHP使用/dev/random作為默認, 這是因為理論上來說, /dev/urandom在一定的情況下, 可能會被可預測(參看: /dev/random), 所以一般上認為, /dev/urandom不如/dev/random安全

8. 為什麼OPENSSL在C++/PHP下AES加密解密結果不一致

結果應該是一樣的,你查看下是多少位加密 128位和256位肯定是不一樣的。
其次 看看 AES_KEY 是否一致,仔細比較下兩者的 key和iv,如果這兩個不一樣,那麼結果肯定不一樣。尤其是iv,PHP封裝的是否默認有了個iv。
你要比較AES_KEY 的key和iv中每個char,不僅僅是輸出的字元串。不能應為有\0字元串的結尾標志而忽略。

如果這些一致,加密加過肯定是一致的。

熱點內容
tcl編譯器 發布:2025-03-13 23:52:59 瀏覽:321
linuxnamed 發布:2025-03-13 23:45:29 瀏覽:361
阿里雲30元伺服器 發布:2025-03-13 23:21:25 瀏覽:350
pythonstatvfs 發布:2025-03-13 23:14:55 瀏覽:953
火車上有密碼多少 發布:2025-03-13 23:14:10 瀏覽:865
解壓火柴 發布:2025-03-13 22:46:39 瀏覽:336
開機密碼在哪裡存著 發布:2025-03-13 22:27:22 瀏覽:952
光流場演算法 發布:2025-03-13 21:35:51 瀏覽:895
免編程軸控 發布:2025-03-13 21:19:24 瀏覽:781
新買的車都要配置哪些 發布:2025-03-13 20:42:50 瀏覽:901