亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

openssl_encrypt,IV 為 0xFFFFFFFFFFFFFFFF

openssl_encrypt,IV 為 0xFFFFFFFFFFFFFFFF

PHP
忽然笑 2021-08-27 16:39:29
我正在使用第三方軟件,該軟件以加密模式 CBC 和 0xFFFFFFFFFFFFFFFF 的 IV 在河豚中創建密鑰。如何將這樣的 IV 傳遞給 openssl_encrypt?源字符串的編碼是windows 1252。我使用帶有 UTF-8 的 PHP 7.3。這是我目前的嘗試:$data = utf8_decode('12345678');// if(strlen($data) % 8)//   $data = str_pad($data, strlen($data) + 8 - strlen($data) % 8, "\0");$opts = OPENSSL_ZERO_PADDING;if(defined('OPENSSL_DONT_ZERO_PAD_KEY'))  $opts = $opts | OPENSSL_DONT_ZERO_PAD_KEY;echo openssl_encrypt($data, 'bf-cbc', utf8_decode('my-secret-key'), $opts, hex2bin('FFFFFFFFFFFFFFFF')) . '<br />';$opts = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING;echo base64_encode(utf8_decode(openssl_encrypt($data, 'bf-cbc', utf8_decode('my-secret-key'), $opts, hex2bin('FFFFFFFFFFFFFFFF')))) . '<br />';結果總是不同。另一端使用“Delphi Encryption Compendium Part I-III”。我無法更改其他軟件創建加密數據的方式。Delphi 軟件使用的版本源代碼可以在這里找到:https : //github.com/winkelsdorf/DelphiEncryptionCompendium/releases/tag/1Delphi 函數如下所示:function BlowfishEncryptStr(const InStr, Password: string;  var OutStr: string; Format: Integer = -1): Boolean;var  Cipher: TCipher_Blowfish;begin  Cipher := TCipher_Blowfish.Create(Password, nil);  try    try      Cipher.Mode := cmCBC;      OutStr := Cipher.CodeString(InStr, paEncode, Format);      Result := True;    except      Result := False;    end;  finally    FreeAndNil(Cipher);  end;end;使用以下參數調用該函數:BlowfishEncryptStr('12345678', 'my-secret-key');我嘗試了 0xFFFFFFFFFFFFFFFF 的 IV,因為在這種情況下,這似乎是 Delphi 加密綱要的默認值。我也試圖通過 0x0000000000000000 。
查看完整描述

1 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

初始化向量只是二進制數據 - 不需要使用整數。所以答案很簡單:$sIv= "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF";

其余的很不清楚:“結果總是不同”是什么意思?確保 Delphi 程序始終產生相同的輸出(否則它會使用您尚未意識到的初始化或比您的腳本所做的更多)。您的 PHP 腳本每次執行時應始終產生相同的輸出,即使第二個輸出根本沒有任何意義(對二進制數據進行 UTF 解碼 - 您甚至忘記了“8”)。


查看完整回答
反對 回復 2021-08-27
  • 1 回答
  • 0 關注
  • 171 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號