обфускация php шифрование / дешифрование - PullRequest
1 голос
/ 10 ноября 2010

Есть ли способ кодировать / декодировать строку с использованием секретного ключа.Я буду использовать base64, чтобы дать вам пример того, что я ищу.

<?php 

$secret = 'abc123'; 
$string = 'Hello World';
$en = base64_encode($string,$secret);//encoded output returns here

echo base64_decode($en,$secret);//output: "Hello World"

?>

, поэтому в основном я прошу использовать ключ / соль, чтобы кодировать текст, а затем декодировать его обратно, используя только тот же секретный ключ.в противном случае должен быть неправильный вывод :)

Ответы [ 4 ]

4 голосов
/ 10 ноября 2010

Возможно, вы захотите использовать расширение mcrypt для PHP.

Следующее может быть немного излишним, в зависимости от того, что вы хотите сделать, но безопасность в значительной степени гарантируется, если вы храните свои ключи в безопасности, такAES еще не сломан:)

function enc_aes($str, $key, $iv) {
    $aes = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
    if (!$aes) die("<b>mcrypt_module_open failed!</b>");
    (mcrypt_generic_init($aes, $key, $iv) != -1) or die("<b>mcrypt_generic_init failed!</b>");

    // PHP will pad query with \0 to multiple of block size
    $ret = mcrypt_generic($aes, $str);
    mcrypt_generic_deinit($aes);
    return $ret;
}

function dec_aes($str, $key, $iv) {
    $aes = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
    if (!$aes) die("<b>mcrypt_module_open failed!</b>");
    (mcrypt_generic_init($aes, $key, $iv) != -1) or die("<b>mcrypt_generic_init failed!    </b>");

    // PHP will pad query with \0 to multiple of block size
    $ret = mdecrypt_generic($aes, $str);
    mcrypt_generic_deinit($aes);
    return $ret;
}

// Specifying key & IV as hex. Obviously doing so in the source is rather unsafe...

// For example. Key is 128-bits
$key = pack("H*", "0123456789ABCDEFFEDBCA9876543210");

// For example. Initialization Vector is 64-bits
$iv = pack("H*", "0123456789ABCDEF");
$encrypted_string = enc_aes("decrypted string", $key, $iv);

// Should output "decrypted string" :]
print( dec_aes($encrypted_string, $key, $iv) );
3 голосов
/ 10 ноября 2010
1 голос
/ 10 ноября 2010

Учебник по использованию библиотеки Mcrypt для шифрования: http://www.itnewb.com/v/PHP-Encryption-Decryption-Using-the-MCrypt-Library-libmcrypt

И более подробное руководство по шифрованию PHP в целом: http://www.tuxradar.com/practicalphp/17/3/1

Предупреждение: Шифрование очень сложно сделать правильно. Если это просто для чего-то простого, тогда круто, но если вы на самом деле пытаетесь хранить конфиденциальную информацию, тогда вам стоит подумать об использовании программного обеспечения, такого как GnuPG , для обработки асимметричного шифрования. Для взаимодействия с GnuPG существует расширение PHP .

0 голосов
/ 25 января 2013

Mcrypt выполняет свою работу!

Тем не менее, если вы хотите что-то менее сложное, вы можете XOR $string с вашим $secret для симметричного шифрования, а затем кодировать его с помощью base64_encode.Теперь, если вам нужно реальное содержимое $string, вам просто нужно его декодировать (base64_decode) и снова XOR, используя тот же $secret.

...