關於php中openssl_public_encrypt無填充的一個注
昨天在使用openssl_public_encrypt函式rsa加密一些資料傳輸的時候,怎麼都是加密失敗。
if (openssl_public_encrypt($data, $encrypted, $this->pubkey, OPENSSL_NO_PADDING)){ $data = base64_encode($encrypted); }else { $data = ''; }return $data;
把填充模式換成預設的話是加密成功的,我百度到的資料都是說加密的資料的長度問題,但我的資料是不定長度,而且對應介面使用的解密方式也固定是OPENSSL_NO_PADDING無填充方式,不能使用預設的填充模式。後面終於讓我在Stack Overflow上找到一個相同的問題
最好配合這篇文章blog食用
大致說明一下出現問題的原因,不一定完全準確,各位看官大概理解就好,在java(Android)中rsa加密選擇無填充模式如果不足128位元組的話,呼叫方法會自動幫你將資料用0(還是空格?)填充至128位元組再進行加密,但php跟java中沒有統一的填充標準,所以openssl_public_encrypt中並沒有幫我們做這一件事情,rsa又對加密資料長度有要求(這個與鑰模有關),從而導致加密失敗,這就需要我們自己手動去填充了。可以使用php函式str_pad
$data=str_pad($data, 128);
預設填充空格,加密後反過來也解密成功了。
作者:菜six歲
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4606/viewspace-2810848/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 8個值得關注的PHP安全函式PHP函式
- 關於python中填充缺失值的問題Python
- 影象處理中關於孔洞填充的方法總結
- 關於php解構函式的一個有趣問題PHP函式
- 一個關於php兩個陣列compare實踐PHP陣列
- 關於ACM中的無窮大ACM
- 一個資料庫要關注的問題資料庫
- Elasticsearch中關於transform的一個問題分析ElasticsearchORM
- Go 1.17中值得關注的幾個變化Go
- 關於PHP中的警告資訊和session的一些討論PHPSession
- 關於 PHP 的資料型別 (一)PHP資料型別
- 關於PHP 的一點點小分享PHP
- php中關於會話機制的理解PHP會話
- 一個關於recyclerView的bugView
- 關於UIInterfaceOrientation的一個bugUI
- 關於Sqlite的一個demoSQLite
- 關於PHP字串的一道面試題PHP字串面試題
- 關於常用到的幾個排序,php的實現排序PHP
- 關於Oracle中重啟資料庫的一個bugOracle資料庫
- Oracle關於nvl的一個BugOracle
- 關於教程的一個問題
- 關於php中靜態方法,靜態屬性的一些淺見PHP
- 一個 Pillow 實現的影像填充函式函式
- 一個 Pillow 實現的影象填充函式函式
- PHP中關於foreach的簡單的用法總結PHP
- Java程式設計思想中關於閉包的一個例子Java程式設計
- 請教關於jb中開發ejb的一個問題
- 騰訊遊戲增長提速,關注一個新訊號遊戲
- 關於PHP的十大誤解 你中了幾個?PHP
- 28個關於PHP核心技術的面試題,助力跳槽!PHP面試題
- 記一次有意思的業務實現 → 單向關注是關注,雙向關注則成好友
- 關於Oracle和MySQL中的無密碼登入OracleMySql密碼
- 分享學習php的非同步協程生態框架(swow),大家有興趣可以關注關注。PHP非同步框架
- 關於PHP的切換版本PHP
- php關於session的問題PHPSession
- 關於Jive論壇中CACHE Hash機制的一個疑問
- 請教一個關於JAVA SOCKET程式設計中的問題Java程式設計
- 關於Integer面試的一個問題面試