簡體   English   中英

使用OpenSSL進行PHP加密

[英]PHP encryption using OpenSSL

我一直試圖編寫兩個函數來加密和解密我的數據,因為我以純文本形式存儲了一些我不想進入數據庫的信息。 加密功能可以正常工作。 但是我不知道為什么解密不帶回純文本?

我做錯了什么嗎?

<?php
$string = "This is my string!";

$encryption_key = "DVF0!LoQs2bPyTvSF0epXPFStbIn!057";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length(AES_256_CBC));

function encryptString($encryption_key, $iv, $string) {
    define('AES_256_CBC', 'aes-256-cbc');
    $encrypted = openssl_encrypt($string, AES_256_CBC, $encryption_key, 0, $iv);
    return $encrypted;
}

function decryptString($encryption_key, $iv, $encrypted) {
    define('AES_256_CBC', 'aes-256-cbc');
    $encrypted = $encrypted . ':' . $iv;
    $parts = explode(':', $encrypted);
    $decrypted = openssl_decrypt($parts[0], AES_256_CBC, $encryption_key, 0, $parts[1]);
    return $decrypted;
}

$encryptstring = encryptString($encryption_key, $iv, $string);
$decryptstring = decryptString($encryption_key, $iv, $encryptstring);
?>

原文: <? print $string; ?> <? print $string; ?>
加密密鑰: <?php print $encryption_key; ?> <?php print $encryption_key; ?>
加密的func: <?php print $encryptstring; ?> <?php print $encryptstring; ?>
解密的func: <?php print $decryptstring; ?> <?php print $decryptstring; ?>

每次使用openssl_random_pseudo_bytes函數調用時,加密密鑰都會更改

將密鑰設為靜態,例如$encryption_key = "XXXX"; 或全局變量,並且只能調用一次。

不要忘記也將其應用於您的$ iv。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM