導航:首頁 > 編程語言 > phpmd56

phpmd56

發布時間:2025-04-13 04:29:31

『壹』 pythonphp計算md5為什麼不一樣

#!/usr/bin/envpython

#-*-coding:UTF-8-*-

importhashlib

string='123456SkinRun51'

md5=hashlib.md5()

md5.update(string.encode('utf-8'))

res=md5.hexdigest()

print('md5加密後結果:',res)

-------------------------------------------

echomd5(utf8_encode('123456SkinRun51')).PHP_EOL;

exit();

敘述:python3.6.6 ;php7

『貳』 php 支付寶介面官方給的md5簽名版本和rsa簽名版本的區別

雖然支付寶官方還未提供相關SDK,PHP確實可以實現RSA方式的簽名,這點其實很重要,由於不熟悉,在遇到困難的時候,經常會不由自主地想到是否PHP不支持RSA簽名,乾脆用MD5得了,這樣就沒有了前進的動力。其實說穿了MD5和RSA簽名,不同的只是簽名方式的區別,其他的都一樣,因此我這里主要說一下如何用RSA進行簽名和驗簽。
首先你需要准備下面的東西:
php的openssl擴展里已經封裝好了驗簽的方法openssl_verify。
如果在Windows下的php.ini需要開啟Openssl模塊: extension=php_openssl.dll
商戶私鑰:
即RSA私鑰,按照手冊,按以下方式生成:
openssl genrsa -out rsa_private_key.pem 1024
商戶公鑰:
即RSA私鑰,按照手冊,按以下方式生成:
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
生成之後,按照手冊的說明,需要在簽約平台上傳公鑰,需要注意的是,上傳的時候需要把所有的注釋和換行都去掉。
另外手冊中還有如下命令
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
該命令將RSA私鑰轉換成PKCS8格式,對於PHP來說,不需要。
支付寶公鑰:
根據手冊,在簽約平台獲得。
如果你直接復制下來的話,會得到一個字元串,需要進行下面的轉換;
1)把空格變成換行
2)添加註釋
比如你復制下來的公鑰是:
ztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M
UmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j
TCoccYMDXEIWYTs3CwIDAQAB,那轉換之後為:
-----BEGIN PUBLIC KEY-----

ztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M
UmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j
TCoccYMDXEIWYTs3CwIDAQAB
-----END PUBLIC KEY-----
把公鑰保存在文件里。
注意這個是2048位的公鑰應該是9行或者10行,不能為1行,不然PHP的openssl_pkey_get_public無法讀取,pub_key_id的結果為false,如果沒有-----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY----- 可以自己加上,最後保存到一個rsa_public_key.pem文件中。
好了,現在已經有了所有的東西,先看簽名函數:
復制代碼
1 <?php
2 /**
3 * 簽名字元串
4 * @param $prestr 需要簽名的字元串
5 * return 簽名結果
6 */
7 function rsaSign($prestr) {
8 $public_key= file_get_contents('rsa_private_key.pem');
9 $pkeyid = openssl_get_privatekey($public_key);
10 openssl_sign($prestr, $sign, $pkeyid);
11 openssl_free_key($pkeyid);
12 $sign = base64_encode($sign);
13 return $sign;
14 }
15 ?>
復制代碼
注意點:
1.$prestr的內容和MD5一樣(參見手冊,但不包含最後的MD5密碼)
2.簽名用商戶私鑰
3.最後的簽名,需要用base64編碼
4.這個函數返回的值,就是這次請求的RSA簽名。
驗簽函數:
復制代碼
1 <?php
2 /**
3 * 驗證簽名
4 * @param $prestr 需要簽名的字元串
5 * @param $sign 簽名結果
6 * return 簽名結果
7 */
8 function rsaVerify($prestr, $sign) {
9 $sign = base64_decode($sign);
10 $public_key= file_get_contents('rsa_public_key.pem');
11 $pkeyid = openssl_get_publickey($public_key);
12 if ($pkeyid) {
13 $verify = openssl_verify($prestr, $sign, $pkeyid);
14 openssl_free_key($pkeyid);
15 }
16 if($verify == 1){
17 return true;
18 }else{
19 return false;
20 }
21 }
22 ?>
復制代碼
注意點:
1.$prestr的內容和MD5一樣(參見手冊)
2.$sign是支付寶介面返回的sign參數用base64_decode解碼之後的二進制
3.驗簽用支付寶公鑰
4.這個函數返回一個布爾值,直接告訴你,驗簽是否通過
支付寶官方提供的PHP版SDK demo中只對MD5加密方式進行了處理,但android 端和ios端 請求支付寶加密方式只能用RSA加密演算法,這時服務端PHP就無法驗證簽名了,所以需要對demo進行一些修改。
1、修改alipay_notify.class.php文件
verifyNotify 函數第46行
$isSign = $this->getSignVeryfy($_POST, $_POST["sign"]);
改成
$isSign = $this->getSignVeryfy($_POST, $_POST["sign"], $_POST["sign_type"]);
verifyReturn 函數第83行
$isSign = $this->getSignVeryfy($_GET, $_GET["sign"]);
改成
$isSign = $this->getSignVeryfy($_GET, $_GET["sign"], $_GET["sign_type"]);
getSignVeryfy 函數 116行
function getSignVeryfy($para_temp, $sign) {
改成
function getSignVeryfy($para_temp, $sign, $sign_type) {
getSignVeryfy 函數 127行
switch (strtoupper(trim($this->alipay_config['sign_type']))) {
case "MD5" :
$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
break;
default :
$isSgin = false;
}
改成
switch (strtoupper(trim($sign_type))) {
case "MD5" :
$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
break;
case "RSA" :
$isSgin = rsaVerify($prestr, $sign);
break;
default :
$isSgin = false;
}
2、新建一個alipay_rsa.function.php文件
復制代碼
1 <?php
2 /* *
3 * RSA
4 * 詳細:RSA加密
5 * 版本:3.3
6 * 日期:2014-02-20
7 * 說明:
8 * 以下代碼只是為了方便商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,並非一定要使用該代碼。
9 * 該代碼僅供學習和研究支付寶介面使用,只是提供一個參考。
10 */
11 /**
12 * 簽名字元串
13 * @param $prestr 需要簽名的字元串
14 * return 簽名結果
15 */
16 function rsaSign($prestr) {
17 $public_key= file_get_contents('rsa_private_key.pem');
18 $pkeyid = openssl_get_privatekey($public_key);
19 openssl_sign($prestr, $sign, $pkeyid);
20 openssl_free_key($pkeyid);
21 $sign = base64_encode($sign);
22 return $sign;
23 }
24 /**
25 * 驗證簽名
26 * @param $prestr 需要簽名的字元串
27 * @param $sign 簽名結果
28 * return 簽名結果
29 */
30 function rsaVerify($prestr, $sign) {
31 $sign = base64_decode($sign);
32 $public_key= file_get_contents('rsa_public_key.pem');
33 $pkeyid = openssl_get_publickey($public_key);
34 if ($pkeyid) {
35 $verify = openssl_verify($prestr, $sign, $pkeyid);
36 openssl_free_key($pkeyid);
37 }
38 if($verify == 1){
39 return true;
40 }else{
41 return false;
42 }
43 }
44 ?>

『叄』 PHP框架都有哪些

PHP框架是一種基礎架構,能在項目開發過程中提高效率,創建更穩定的程序,並減少開發者重復編寫代碼。當前市面上提供了眾多PHP教程和框架,極大簡化了開發過程,快速實現系統功能。以下是一些主流的PHP框架。

1、Laravel

Laravel是目前最受歡迎的PHP框架之一,於2011年6月發布。它具有強大的rest router、artisan命令行工具、可繼承的模板、blade模板、ORM操作資料庫、migration以及強大的測試功能和composer依賴管理。

2、ThinkPHP

這是一個由國人團隊開發的PHP框架,在國內企業中廣泛使用。ThinkPHP的優勢在於有著完整的中文文檔,MVC簡單易用,以及較低的學習成本。還支持XML標簽庫技術的編譯型模版引擎和動態編譯,具有獨特的數據驗證和自動填充,MD5數據加密等功能。

3、Yii

Yii是一個基於組件的高性能PHP框架,被認為是PHP框架中效率最高的之一。專為開發大規模Web應用而設計。提供了各種功能,包括MVC、DAO/ActiveRecord、widgets、caching、等級式RBAC、Web服務、主體化、I18N和L10N等,滿足了現代Web 2.0應用開發的需求。Yii框架的價格也相對較為實惠。

4、CodeIgniter

CodeIgniter是一個應用開發框架,為開發PHP網站的人們提供一個工具包,被廣泛用於開發小型到中型的應用程序,具有簡單的配置和快速運行的特點,適合初學者和對性能有高要求的開發者。另外,CodeIgniter還提供了資料庫抽象、表單驗證、緩存和會話管理等功能。

5、CakePHP

CakePHP是一款快速而簡單的PHP框架,遵循"約定優於配置"的原則,讓開發者更專注於業務邏輯,而不是代碼的細節。CakePHP提供了資料庫訪問、模板引擎、表單處理和安全驗證等功能,適用於構建中型到大型的應用程序,能夠快速構建出穩健可靠的Web應用。

6、Symfony

Symfony是由SensioLabs贊助的PHP開源框架,適用於開發功能完整的Web應用程序。許多開源項目(如Drupal、Composer和phpBB)都使用Symfony組件。Symfony與PHP Unit和其他獨立庫集成,具有高度的靈活性,可以處理具有數十億連接的企業應用程序。同時Symfony也被用於構建微型站點。

7、Zend Framework

Zend Framework是一個基於PHP的開源Web應用程序框架,提供了各種資料庫、緩存和其他常見的Web開發任務。專注於安全性和性能,並提供了靈活的架構,適用於開發各種規模的應用程序。Zend Framework也是一個模塊化的框架,允許開發人員根據項目需求選擇所需的組件,從而提供了高度的定製能力。

8、Slim

Slim是一個PHP微型框架,其開發靈感來源於Ruby的Sinatra微型框架。Slim適用於創建小規模的CRUD應用程序,而不是完整的堆棧框架。Slim是快速原型設計的理想工具,可以用於創建帶有用戶界面的全功能Web應用程序。同時,Slim提供了許多功能,如客戶端HTTP緩存、URL路由、會話管理、cookie加密和快閃記憶體消息。

PHP開發框架有很多,每個框架都有其獨特的特性和優勢,無論選擇哪個框架,都要確保學習和掌握其基本概念和工作原理,如此才能更好地利用框架的特性來提高開發效率和代碼質量。

『肆』 PHP怎麼在mysql insert into語句中實現md5加密

if ($_POST["submit"]) { $sql="insert into reguser (username,password,sex,email,name,idcard,address,phone,qq,regtime)". " values ('$_POST[username]','".md5($_POST[password])."','$_POST[sex]','$_POST[email]','$_POST[name]','$_POST[idcard]','$_POST[address]','$_POST[phone]','$_POST[qq]',now())";

『伍』 php 獲得上傳文件的MD5

if(isset($_FILES['multimedia']) && $_FILES['multimedia']['error']==0){$file_name = $_FILES['multimedia']['name'];$size = getimagesize($_FILES['multimedia']['tmp_name']); $type = $_FILES['multimedia']['type'];$original = $_FILES['multimedia']['tmp_name'];$md5 = md5_file($original);echo $md5;}

md5_file()
md5_file() 函數計算文件的 MD5 散列。md5() 函數使用 RSA 數據安全,包括 MD5 報文摘譯演算法。如果成功,則返回所計算的 MD5 散列,如果失敗,則返回 false。

語法:md5(string,raw)

參數string,必需。規定要計算的文件。

參數charlist,可選。規定十六進制或二進制輸出格式:TRUE - 原始 16 字元二進制格式;FALSE - 默認。32 字元十六進制數。

<?php$filename = "test.txt";$md5file = md5_file($filename);echo $md5file;?>

存儲 "test.txt" 文件的 MD5 散列:

<?php$md5file = md5_file("test.txt");file_put_contents("md5file.txt",$md5file);?>

在本例中,我們將檢測 "test.txt" 是否已被更改(即是否 MD5 散列已被更改):

<?php$md5file = file_get_contents("md5file.txt");if (md5_file("test.txt") == $md5file){echo "The file is ok.";}else{echo "The file has been changed.";}?>

輸出:

The file is ok.

『陸』 說能說清楚C#md5和php md5加密技術的區別,以實例說明

原理其實都是一樣的,你說的種子問題其實可以理解為加密鹽

同樣的值的MD5結果是一樣的,前提是編碼需要一致

默認的編碼是Unicode
對非英文字元 ,編碼不同MD5的結果也是不同的,
以下是對字元"夢世繁華"的md5值的比較,你可以看看

md5("夢世繁華")
UTF-8 32位GB2312 32位Unicode 32位


//=====================================================
md5 16
md5 16 utf-8
a2cccbcf9c0e3ca9
A2CCCBCF9C0E3CA9

md5 16 gb2312
2f82ed6fb6a9d0a8
2F82ED6FB6A9D0A8

md5 16 unicode
9821973ddd33dc81
9821973DDD33DC81

//=====================================================
md5 Hash Utf-8
e5-18-ec-8a-a2-cc-cb-cf-9c-0e-3c-a9-1d-e2-9b-5a
E5-18-EC-8A-A2-CC-CB-CF-9C-0E-3C-A9-1D-E2-9B-5A

md5 hash GB2312
5e-ba-da-d0-2f-82-ed-6f-b6-a9-d0-a8-59-9b-c7-3a
5E-BA-DA-D0-2F-82-ED-6F-B6-A9-D0-A8-59-9B-C7-3A

md5 hash UNICode
5f-df-ba-4d-98-21-97-3d-dd-33-dc-81-8b-e3-1c-2f
5F-DF-BA-4D-98-21-97-3D-DD-33-DC-81-8B-E3-1C-2F
//=====================================================
Sha1Hash Utf-8
a8-26-5f-e6-69-27-18-f4-3c-1b-16-30-10-9e-ee-3f-8d-df-3a-84
A8-26-5F-E6-69-27-18-F4-3C-1B-16-30-10-9E-EE-3F-8D-DF-3A-84

Sha1Hash GB2312
b4-eb-13-07-bc-7b-9b-d3-e4-8c-4a-82-6a-9b-7b-8b-1e-4a-dd-3b
B4-EB-13-07-BC-7B-9B-D3-E4-8C-4A-82-6A-9B-7B-8B-1E-4A-DD-3B

Sha1Hash UNICode
af-be-2d-d5-d2-7e-fa-55-ea-11-3d-ad-da-35-fc-a5-b9-c4-e9-88
AF-BE-2D-D5-D2-7E-FA-55-EA-11-3D-AD-DA-35-FC-A5-B9-C4-E9-88

閱讀全文

與phpmd56相關的資料

熱點內容
stc單片機外接有源時鍾 瀏覽:747
為什麼安卓手機老是會跳出廣告 瀏覽:559
eclipse導入android工程 瀏覽:61
二手房解壓款多少錢 瀏覽:55
c專家編程c陷阱 瀏覽:289
澳客app怎麼授權 瀏覽:767
雲伺服器多個賬號同時登錄 瀏覽:689
車床m10x15螺紋編程 瀏覽:807
呼蘭程序員公司 瀏覽:2
javaurlrewrite 瀏覽:14
qq伺服器是干什麼用的 瀏覽:884
金盾2016加密提取軟體 瀏覽:522
淘寶外賣伺服器怎麼了 瀏覽:242
數字加密技術的運作過程分點作答 瀏覽:758
單片機蜂鳴器生日快樂 瀏覽:299
在sqlserver伺服器內獲取客戶端的ip地址 瀏覽:996
數碼管顯示的單片機c程序 瀏覽:792
linux掛載文件系統 瀏覽:896
linux掛載windows磁碟 瀏覽:194
ctea演算法 瀏覽:33