편집 : 버그 리포트를 이전 편집에서 삭제했습니다. 버그 리포트가 삭제 된 이유에 대해 자세히 조사하겠습니다.
해당 코드를보고 OP와 비교하면 암호화해야하는 데이터/메시지임을 알게되었습니다.
- 메시지가 "키로"해시 처리되어 문자열을 비 웁니다. 기존의 해싱 방법을 메시지와 키 을 "키로 사용하여"모두 암호화하려고 했으므로 키와 데이터/메시지 모두를 해시하지 말고.
(!) 참고 :
는 결과 스크립트는 다음과 같은 것으로 나왔다 바로 아래 주석 처리 된 줄도 각각의 부분 작업; 동시에 둘 다 사용하지 마십시오.
$plaintext = 'The secret message in plain text';
$password = '3sc3RLrpd17';
$key = substr(hash('sha256', $password, true), 0, 32);
$iv = openssl_random_pseudo_bytes(16);
$method = "aes-256-xts";
$userName = "JOHN";
$encrypted = base64_encode(openssl_encrypt($plaintext, $method, $key, OPENSSL_RAW_DATA, $iv));
// $encrypted = openssl_encrypt($plaintext, $method, $key, OPENSSL_RAW_DATA, $iv);
echo "<br>";
var_dump($iv);
echo "<br>";
var_dump($userName);
echo "<br>";
var_dump($encrypted);
echo "<hr>";
$decrypted = openssl_decrypt(base64_decode($encrypted), $method, $key, OPENSSL_RAW_DATA, $iv);
// $decrypted = openssl_decrypt($encrypted, $method, $key, OPENSSL_RAW_DATA, $iv);
echo 'decrypted to: ' . $decrypted . "\n\n";
특별 참고 사항 : 나는 또한 Jay Blanchard's 두뇌와 테스트; 2 개의 머리는 1보다는 수시로 더 낫다, 그래서 Jay는 이것을위한 신용을 가치가있다.
참고 : 파일 시스템/디스크 암호화를위한 소스가 두 개 이상 ("AES-256-XTS")임을 나타냅니다. "AES-256-XTS 및 AES-128-XTS"방법은 파일 시스템 암호화를위한 것이므로 텍스트에는 적합하지 않습니다.
소스 코드는 this link에서 가져온 :
<?php
$plaintext = 'My secret message 1234';
$password = '3sc3RLrpd17';
$method = 'aes-256-cbc'; // I replaced aes-256-cbc with aes-256-xts during testing
// Must be exact 32 chars (256 bit)
$password = substr(hash('sha256', $password, true), 0, 32);
echo "Password:" . $password . "\n";
// IV must be exact 16 chars (128 bit)
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
// av3DYGLkwBsErphcyYp+imUW4QKs19hUnFyyYcXwURU=
$encrypted = base64_encode(openssl_encrypt($plaintext, $method, $password, OPENSSL_RAW_DATA, $iv));
// My secret message 1234
$decrypted = openssl_decrypt(base64_decode($encrypted), $method, $password, OPENSSL_RAW_DATA, $iv);
echo 'plaintext=' . $plaintext . "\n";
echo 'cipher=' . $method . "\n";
echo 'encrypted to: ' . $encrypted . "\n";
echo 'decrypted to: ' . $decrypted . "\n\n";
당신이'AES-256 XTS'을 사용하고있는 방법이 될 것으로 보인다. 예를 들어'aes128' 또는'AES-128-CBC'로 바꾸면 결과가 보일 것입니다. http://php.net/manual/en/function.openssl-encrypt.php 문서를 참고하십시오 - 설명서에는 AES-256-XTS가 없습니다. –
@ Fred-ii- 당신은 절대적으로 맞습니다, 고마워요! 나는 내가 그걸 보지 못했다니 믿을 수 없어. 나는 너에게 답을주고 싶다. –
당신은 대단히 환영합니다. Adam, * 건배 * –