php數字簽名,php手寫簽名

本文目錄一覽:

怎麼在PHP實現MD5withRSA-CSDN論壇

RSA 演算法

1978年就出現了這種演算法,它是第一個既能用於數據加密也能用於數字簽名的演算法。

它易於理解和操作,也很流行。演算法的名字以發明者的名字命名:Ron Rivest, Adi

Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。

RSA的安全性依賴於大數分解。公鑰和私鑰都是兩個大素數( 大於 100

個十進位位)的函數。據猜測,從一個密鑰和密文推斷出明文的難度等同於分解兩個

大素數的積。

密鑰對的產生。選擇兩個大素數,p 和q 。計算:

n = p * q

然後隨機選擇加密密鑰e,要求 e 和 ( p – 1 ) * ( q – 1 ) 互質。最後,利用

Euclid 演算法計算解密密鑰d, 滿足

e * d = 1 ( mod ( p – 1 ) * ( q – 1 ) )

其中n和d也要互質。數e和

n是公鑰,d是私鑰。兩個素數p和q不再需要,應該丟棄,不要讓任何人知道。

加密信息 m(二進位表示)時,首先把m分成等長數據塊 m1 ,m2,…, mi ,塊長s

,其中 2^s = n, s 儘可能的大。對應的密文是:

ci = mi^e ( mod n ) ( a )

解密時作如下計算:

mi = ci^d ( mod n ) ( b )

RSA 可用於數字簽名,方案是用 ( a ) 式簽名, ( b )

式驗證。具體操作時考慮到安全性和 m信息量較大等因素,一般是先作 HASH 運算。

RSA 的安全性。

RSA的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理論上的證明,因

為沒有證明破解

RSA就一定需要作大數分解。假設存在一種無須分解大數的演算法,那它肯定可以修改成

為大數分解演算法。目前, RSA

的一些變種演算法已被證明等價於大數分解。不管怎樣,分解n是最顯然的攻擊方法。現

在,人們已能分解140多個十進位位的大素數。因此,模數n

必須選大一些,因具體適用情況而定。

RSA的速度。

由於進行的都是大數計算,使得RSA最快的情況也比DES慢上100倍,無論是軟體還是硬

件實現。速度一直是RSA的缺陷。一般來說只用於少量數據加密。

RSA的選擇密文攻擊。

RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝(

Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信息。實際上

,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:

( XM )^d = X^d *M^d mod n

前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵–每個人都能使

用公鑰。但從演算法上無法解決這一問題,主要措施有兩條:一條是採用好的公鑰協議

,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息

簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way Hash

Function

對文檔作HASH處理,或同時使用不同的簽名演算法。在中提到了幾種不同類型的攻擊方

法。

RSA的公共模數攻擊。

若系統中共有一個模數,只是不同的人擁有不同的e和d,系統將是危險的。最普遍的

情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質,那末該信息無需私鑰就

可得到恢復。設P為信息明文,兩個加密密鑰為e1和e2,公共模數是n,則:

C1 = P^e1 mod n

C2 = P^e2 mod n

密碼分析者知道n、e1、e2、C1和C2,就能得到P。

因為e1和e2互質,故用Euclidean演算法能找到r和s,滿足:

r * e1 + s * e2 = 1

假設r為負數,需再用Euclidean演算法計算C1^(-1),則

( C1^(-1) )^(-r) * C2^s = P mod n

另外,還有其它幾種利用公共模數攻擊的方法。總之,如果知道給定模數的一對e和d

,一是有利於攻擊者分解模數,一是有利於攻擊者計算出其它成對的e』和d』,而無

需分解模數。解決辦法只有一個,那就是不要共享模數n。

RSA的小指數攻擊。 有一種提高

RSA速度的建議是使公鑰e取較小的值,這樣會使加密變得易於實現,速度有所提高。

但這樣作是不安全的,對付辦法就是e和d都取較大的值。

RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA是被研

究得最廣泛的公鑰演算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為

人們接受,普遍認為是目前最優秀的公鑰方案之一。RSA

的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難

度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學界多數

人士傾向於因子分解不是NPC問題。

RSA的缺點主要有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次

一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits

以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大

數分解技術的發展,這個長度還在增加,不利於數據格式的標準化。目前,SET(

Secure Electronic Transaction

)協議中要求CA採用2048比特長的密鑰,其他實體使用1024比特的密鑰。

更多問題到問題求助專區

什麼是PHP

PHP 是一種易於學習和使用的伺服器端腳本語言。只需要很少的編程知識你就能使用PHP 建立一個真正交互的WEB 站點。本教程並不想讓你完全了解這種語言,只是能使你儘快加入開發動態web站點的行列。我假定你有一些HTML(或者HTML編輯器)的基本知識和一些編程思想。

簡介

PHP 是能讓你生成動態網頁的工具之一。PHP 代表:超文本預處理器(PHP:Hypertext Preprocessor)。PHP 是完全免費的,不用花錢,你可以從PHP 官方站點()自由下載。PHP 遵守GNU 公共許可(GPL),在這一許可下誕生了許多流行的軟體諸如Linux和Emacs。你可以不受限制的獲得源碼,甚至可以從中加進你自己需要的特色。PHP 在大多數Unix 平台,GUN/Linux和微軟Windows平台上均可以運行。怎樣在Windows環境的PC 機器或Unix機器上安裝PHP 的資料可以在PHP 官方站點上找到,也可以查閱網頁陶吧的「PHP 安裝全攻備」專題文章。安裝過程很簡單。

如果你的機器解決了2000問題,那麼PHP 也一樣沒有千年蟲問題!

歷史

三年前,Rasmus Lerdorf為了創建他的在線簡歷而創造了”個人主頁工具”(Personal Home Page Tools)。這是一種非常簡單的語言。其後越來越多的人們注意到了這種語言並對其擴展提出了各種建議。在許多人的無私奉獻下以及這種語言本身的源代碼自由性質,它演變成為一種特點豐富的語言,而且現在還在成長中。

PHP 雖然很容易學習,但是速度上比mod_perl(植入web伺服器的perl模塊)慢。現在有了可以與mod_perl 速度想媲美的被稱作Zend 的新引擎,而PHP4 就可以充分利用這個引擎。現在,PHP4 正式版已經發布,大家可以到php 的官方站點上去下載。Andy Gutmans 和Zeev Suraki 是Zend 的主要作者。可以去Zend 站點()了解更多。

PHP 的應用在個人性質的web工程中增長顯著。根據Netcraft在1999 年10月的報告,有931122個域和321128 個IP 地址利用PHP 技術。

PHP 的先進之處

應用PHP 有許多好處。當然已知的不利之處在於PHP 由於是開放源碼項目,沒有什麼商業支持,並且由此而帶來的執行速度緩慢(直到PHP4 之前)。但是PHP 的郵件列表很是有用而且除非你正在運行像Yahoo!或者Amazon.com 這樣的極受歡迎的站點,你不會感覺出PHP 的速度與其他的有什麼不同。最起碼我就沒有感覺出來!好了,讓我們來看看PHP 有那些優點:

學習過程

我個人更喜歡PHP 的非常簡單的學習過程。與Java和Perl 不同,你不必把頭埋進100 多頁的文檔中努力學習才可以寫出一個象樣的程序。只要了解一些基本的語法和語言特色,你就可以開始你的PHP 編碼之旅了。之後你在編碼過程中如果遇到了什麼麻煩,還可以再去翻閱相關文檔。

PHP 的語法類似於C,Perl,ASP 或者JSP。對於那些對上述之一的語言較熟悉的人來說,PHP 太簡單了。相反的,如果你對PHP 了解較多,那麼你對於其他幾種語言的學習都很簡單了。

你只需要30分鐘就可以將PHP 的核心語言特點全部掌握,你可能已經非常了解HTML,甚至你已經知道怎樣用編輯設計軟體或者手工來製作好看的WEB 站點。由於PHP 代碼能夠無障礙的添加進你的站點,在你設計和維護站點的同時,你可以很輕鬆的加入PHP 使得你的站點更加具有動態特性。

資料庫連接

PHP 可以編譯成具有與許多資料庫相連接的函數。PHP 與MySQL是現在絕佳的組合。你還可以自己編寫外圍的函數取間接存取資料庫。通過這樣的途徑當你更換使用的資料庫時,可以輕鬆的更改編碼以適應這樣的變化。PHPLIB就是最常用的可以提供一般事務需要的一系列基庫。

可擴展性

就像前面說的那樣,PHP 已經進入了一個高速發展的時期。對於一個非程序員來說為PHP 擴展附加功能可能會比較難,但是對於一個PHP 程序員來說並不困難。

面向對象編程

PHP 提供了類和對象。基於web的編程工作非常需要面向對象編程能力。PHP支持構造器、提取類等。

可伸縮性

傳統上網頁的交互作用是通過CGI來實現的。CGI程序的伸縮性不很理想,因為它為每一個正在運行的CGI程序開一個獨立進程。解決方法就是將經常用來編寫CGI程序的語言的解釋器編譯進你的web伺服器(比如mod_perl,JSP)。PHP 就可以以這種方式安裝,雖然很少有人願意這樣以CGI方式安裝它。內嵌的PHP 可以具有更高的可伸縮性。

更多特點

PHP 的開發者們為了更適合web編程,開發了許多外圍的流行基庫,這些庫包含了更易用的層。你可以利用PHP 連接包括Oracle,MS-Access,Mysql在內的大部分資料庫。你可以在蒼蠅上畫圖,編寫程序下載或者顯示e-mail。你甚至可以完成網路相關的功能。最好的是,你可以選擇你的PHP 安裝版本需要哪些功能。引用Nissan 的Xterra 的話來說就是PHP 可以做到你想讓它做到的一切而且無所不能!

用PHP如何實現數字簽名啊··跪求高人指點···

以下是資料:

php中數字簽名與校驗

1. 先用php生成一對公鑰和私鑰

$res = openssl_pkey_new();

openssl_pkey_export($res,$pri);

$d= openssl_pkey_get_details($res);

$pub = $d[‘key’];

var_dump($pri,$pub);

輸出依次為私鑰和公鑰的pem字串,如:

string(916) “—–BEGIN PRIVATE KEY—–

MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKs124okAnX5jh1Q

wsETi80b4ZyYlYUSsAtvS7ZG+GSLAox24TKNwWIy5cUdKfK/5QEJjZ0S8LjRSYCG

to9LkwQTQrKY8BBXVCQQS3VXRqz4on9bmcGSyLMK6vQxt9NnJpk6aBmJE7z35+8z

TTLwdUbYaMAcYqrsYDfgBSNBgwbDAgMBAAECgYBvolJfpFMmcW3El6AlHIWPW5qj

7KmxdxnqmssXMvdLN4iV5f24ZM2vJdjDydxMN+st3fjEblEfcPcoIq5uiKx2bnO3

f9g0yt+qUoXdz4LK6jV1NfuAZDcnBm7CXfE7BDREgyiRg4ZXIvp4L0Y2zBMdFTmg

LKkXb2M1P3pK53UbwQJBANupqPXFQjdHvAa3voT+UI8OhmLbw/Vyh6Ii1glwMfyq

VS2lAakj9d1hqLYZvw+eNeZBnzZNPuMJg5aj/WKUqasCQQDHiFLS7Yb1rbhfjmRt

ZL4zXuvX1hVjTNo2TeZwPniGpYa+QHcauDDep5C9q//n+D+ZtkbkECxpOVhrUHSI

KO9JAkEApl3lHd98uymVevEHVurWUMMLfSw9SlSn7WC9AwD6mwbW5G8oxtX5jOY+

RU1Sq52D7RSeZR40FvhJtXoWmudFaQJAc8E+a2epF/YENEtjL6N2RE8Y+0oTdlwr

a72dphhXy6VTmiPD9RhOIZ2MdrzF5Uk7fG0mi0Bmw1SlWvx93lABIQJBALXPeoNa

b4dQkRkfqCHtyrWOeRcC1Y6FyTfNj+cRBzdIcmFc21hxj6HKy2M6/XGI3rAE5L+B

mmlSmN1enhoCUqc=

—–END PRIVATE KEY—–

string(272) “—–BEGIN PUBLIC KEY—–

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrNduKJAJ1+Y4dUMLBE4vNG+Gc

mJWFErALb0u2RvhkiwKMduEyjcFiMuXFHSnyv+UBCY2dEvC40UmAhraPS5MEE0Ky

mPAQV1QkEEt1V0as+KJ/W5nBksizCur0MbfTZyaZOmgZiRO89+fvM00y8HVG2GjA

HGKq7GA34AUjQYMGwwIDAQAB

—–END PUBLIC KEY—–

2. 保存好自己的私鑰,把公鑰可以公開給別人。如果需要對某數據進行簽名,證明那數據是從你這裡發出的,就需要用私鑰:

$res = openssl_pkey_get_private($pri);

if (openssl_sign(‘hello’, $out, $res))

var_dump(base64_encode($out));

上例中 $pri 為自己的私鑰,’hello’ 為待簽名的數據,如果簽名成功,最後輸出為base64編碼後的簽名,如:

j19H+C/NQEcyowezOQ+gmGi2UoPJNXyJ+KwpkEzJ5u4qaRD3cY4qhfFfIosypypwJTJ4LjRYOIPNQMQm6ICj2nMdGfn/p/pp7il+xGz2aUWdOXkJFgIc/PGC95C9sLH04Tc6QSuV5IMd9rjBjyv+ieokMLFm9cmtN2hGag9vq1s=

3. 別人收到你的數據 ‘hello’ 和簽名字串,想驗證這是從你發來的數據的話,用你公開的公鑰驗證:

$sig = base64_decode($sig);

$res = openssl_pkey_get_public($pubkey);

if (openssl_verify(‘hello’, $sig, $res) === 1)

; // 通過驗證

上例中剛開始的 $sig 為之前你base64編碼過的簽名, $pubkey 為你的公鑰

php中這種簽名使用的是RSA演算法;數字簽名可以在 單點登錄 等系統中派上用場。

用PHP做微信支付簽名錯誤,請教一下這個是什麼原因

出現這種情況可能是您的網路不好,或者是沒有遵循開發規範,導致數字簽名失敗建議您更換更好的網路,同時根據開發規範調整後台代碼。

php是什麼意思

PHP是一個基於服務端來創建動態網站的腳本語言,您可以用PHP和HTML生成網站主頁。當一個訪問者打開主頁時,服務端便執行PHP的命令並將執行結果發送至訪問者的瀏覽器中,這類似於ASP和CoildFusion,然而PHP和他們不同之處在於PHP開放源碼和跨越平台,PHP可以運行在WINDOWS NT和多種版本的UNIX上。它不需要任何預先處理而快速反饋結果,它也不需要mod_perl的調整來使您的伺服器的內存映象減小。PHP消耗的資源較少,當PHP作為Apache Web伺服器一部分時,運行代碼不需要調用外部二進位程序,伺服器不需要承擔任何額外的負擔。

除了能夠操作您的頁面外,PHP還能發送HIIP的標題。您可以設置cookie,管理數字簽名和重定向用戶,而且它提供了極好的連通性到其它資料庫(還有DBC),集成各種外部庫來做用PDF文檔解析XML的任何事情。

有了PHP就無需特殊的開發環境和IDE,您可以以?php 作為程序塊的開始,可以以 ?作為PHP代碼塊的結束,當然您也可以用帶有 % %的標記甚至用script LANGUAGE=「php」/script的ASP的格式來配置 PHP,PHP會在那些標誌間處理所有的事情。

PHP的編程語言類似與C和Perl。在使用它們之前您沒必要聲明任何變數,而且建立數組和Hash是很簡單的事情。PHP還有一些面向對象的特徵,可以為組織和打包您的代碼提供很好的幫助。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/241796.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:43
下一篇 2024-12-12 12:43

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台伺服器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • PHP數組去重詳解

    一、array_unique函數 array_unique是php中常用的數組去重函數,它基於值來判斷元素是否重複,具體使用方法如下: $array = array(‘a’, ‘b…

    編程 2025-04-24
  • PHP導出Excel文件

    一、PHP導出Excel文件列寬調整 當我們使用PHP導出Excel文件時,有時需要調整單元格的列寬。可以使用PHPExcel類庫中的setWidth方法來設置單元格的列寬。下面是…

    編程 2025-04-24
  • php擴展庫初探

    一、什麼是php擴展庫? PHP擴展庫(PHP extension)是一些用C語言編寫的動態鏈接庫,用於擴展PHP的功能。PHP擴展庫使得PHP可以與各種資料庫系統相連、SMTP、…

    編程 2025-04-23

發表回復

登錄後才能評論