第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 OCB 模式時 Openssl 解密失敗

使用 OCB 模式時 Openssl 解密失敗

PHP
函數(shù)式編程 2023-10-15 15:07:40
我有一個 PHP 庫,它是 Openssl 的包裝器,其目標是讓新開發(fā)人員默認情況下更簡單、更安全地加密和解密數(shù)據(jù)。該庫成功處理許多不同的密碼和模式,但我無法讓 OCB 模式正常工作。我似乎能夠毫無問題地加密數(shù)據(jù),但當我嘗試解密時,它openssl_decrypt()會返回false。當我檢查openssl_error_string()任何錯誤消息時,沒有任何錯誤消息。AES-128-CBC下面是一個 MVCE,演示了使用和執(zhí)行相同的代碼AES-128-OCB。該AES-128-CBC示例按預期工作。沒有AES-128-OCB任何跡象表明失敗的原因。(我在示例中特意使用了 16 個字符的純文本字符串,以從方程中刪除空填充)。$ciphers = [    'AES-128-CBC',    'AES-128-OCB'];$key = 'secretkey';$plainText = 'Testing testing!';foreach ($ciphers as $cipher) {    printf('Cipher: %s%s', $cipher, PHP_EOL);    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));    printf('IV: %s%s', $iv, PHP_EOL);    printf('Text: %s%s', $plainText, PHP_EOL);    $encryptedText = openssl_encrypt($plainText, $cipher, $key, OPENSSL_RAW_DATA, $iv);    printf('Encrypted Text: %s%s', $encryptedText, PHP_EOL);    $encodedText = base64_encode($encryptedText);    printf('Encoded Text: %s%s', $encodedText, PHP_EOL);    $decodedText = base64_decode($encodedText);    printf('Decoded Text: %s%s', $decodedText, PHP_EOL);    $decryptedText = openssl_decrypt($decodedText, $cipher, $key, OPENSSL_RAW_DATA, $iv);    printf('Decrypted Text: ');    var_dump($decryptedText);    while ($msg = openssl_error_string()) {        printf('Openssl Error: %s%s', $msg, PHP_EOL);    }    printf('%s%s', str_repeat('-', 60), PHP_EOL);}輸出:Cipher: AES-128-CBCIV: ?K?K?l4.?4;yText: Testing testing!Encrypted Text: vg??~6?D??R?????xd?^?,?[??p"~Encoded Text: dgUIZ5itfjazRLTiUvzIxsjNeGScXqksjFsaq7pwIn4=Decoded Text: vg??~6?D??R?????xd?^?,?[??p"~Decrypted Text: string(16) "Testing testing!"------------------------------------------------------------Cipher: AES-128-OCBIV: ??)?????XText: Testing testing!Encrypted Text: m??i??B[?d?Encoded Text: BW2IkWmo5kJbFgYf8YdkpQ==Decoded Text: m??i??B[?d?Decrypted Text: bool(false)------------------------------------------------------------我不是加密方面的專家,但在從事這項工作時學到了很多知識。我在 google 上搜索了 OCB 模式,并讓它與 PHP 和 Openssl 一起工作,但幾乎沒有關于這個主題的信息。
查看完整描述

1 回答

?
三國紛爭

TA貢獻1804條經(jīng)驗 獲得超7個贊

OCB是一種類似于 GCM 的經(jīng)過身份驗證的加密算法,即在加密過程中生成一個標簽,該標簽用于在解密過程中進行身份驗證。OpenSSL 支持 OCB,因此高級 API 的實現(xiàn)與 GCM完全等效。

此 C 代碼返回與發(fā)布的 PHP 代碼相同的密文(假設相同的明文、密鑰和隨機數(shù))。但是,C 代碼生成的標簽不是PHP 代碼生成的。$tag它既不會附加到密文中,也不會像 GCM / CCM 那樣在第 6 個參數(shù) ( ) 中返回。后者甚至會導致錯誤消息(無法為不支持 AEAD 的密碼提供經(jīng)過身份驗證的標簽)。

2014 年 5 月的PHP 錯誤報告#67304為 GCM 提交了相同的錯誤(盡管 GCM 位于支持的算法列表中,但未提供標簽),這導致了 7.1 中對 GCM 和 CCM 的支持。(2016 年 12 月發(fā)布)。在 2016 年 1 月的相關 PHP RFC?OpenSSL AEAD 支持中,可以在“未來范圍一旦擴展支持 OpenSSL 1.1,添加對 OCB 模式的支持”下閱讀。

總體而言,看起來 PHP 中的 OCB 可能還沒有完全實現(xiàn),就像當時的 GCM / CCM 一樣,這最終是一個錯誤。


查看完整回答
反對 回復 2023-10-15
  • 1 回答
  • 0 關注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號