[英]PHP openssl_decrypt returns strange output about 10% of the time
利用我在互聯網上可以找到的所有知識,我想到了一個salt openssl加密和解密功能。 它可以在90%的時間內工作,但每次解密一次,解密都會返回一個空的字符串或與加密數據無關的隨機字節。 我使用的代碼是:
function Encrypt($subject, $method, $saltLength, $key){
if($method==0){
$salt=random_bytes($saltLength);
$key=hash('sha256', $salt.$key);
$iv=random_bytes(16);
$encrypt=base64_encode(openssl_encrypt($subject, 'aes-256-ctr', $key, 0, $iv));
$return=base64_encode("$method:$salt:$iv:$encrypt");
}
return($return);
}
function Decrypt($subject, $key){
$components = explode( ':', base64_decode($subject));
$method=$components[0];
if($method==0){
$salt=$components[1];
$key = hash('sha256', $salt.$key);
$iv=$components[2];
$encrypt=base64_decode($components[3]);
$return=(openssl_decrypt($encrypt, 'aes-256-ctr', $key, 0, $iv));
}
return($return);
}
$testE=Encrypt('Test', 0, 20, 'Key0');
var_dump($testE);
echo('<br><br>');
$testD=Decrypt($testE, 'Key0');
var_dump($testD);
echo('<br><br>');
$testD=Decrypt($testE, 'Key0');
var_dump($testD);
echo('<br><br>');
該代碼的錯誤結果示例如下:
string(72) "MDrVsJAIE8OFjyM6y5dt+xkij5m/rTrHTnzeWs0IRrTKvNR1L7wfOmJrSlNRWFIzUFQwPQ=="
string(1) "�"
string(1) "�"
或返回一個完全空的字符串:
string(72) "MDrQ+5c83vJXnva1OjrbJ2RWGjU5ajrwCn+qCneIIOqh48Gt0JmbOllsZFVUMHRuUFQwPQ=="
string(0) ""
string(0) ""
我進行兩次解密的原因是查看錯誤是在解密還是在加密中,結果清楚地表明加密在某種程度上是錯誤的。
我的問題是什么導致數據加密錯誤? &我可以改進此方法並使它更加安全嗎?
雖然不是為什么會發生的答案,但結果往往是最重要的。
如果真是這樣,那么,如果您獲得90%的准確度,則while循環將迅速帶您上路.....
while(strlen($testD) < 5) {
$testD=Decrypt($testE, 'Key0');
}
如果您的目標是找出導致次要錯誤的原因,那么您可能必須更深入地研究核心代碼。 但是,在我的職位上,老板經常說“完成並繼續前進”,因此我經常需要尋找一種可行的解決方案來收集信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.