php混淆加密/解密

php混淆加密/解密,php,cryptography,decode,encode,Php,Cryptography,Decode,Encode,是否有一种使用密钥对字符串进行编码/解码的方法。 我将使用base64为您提供一个我需要的示例 <?php $secret = 'abc123'; $string = 'Hello World'; $en = base64_encode($string,$secret);//encoded output returns here echo base64_decode($en,$secret);//output: "Hello World" ?> 所以基本上我要求使用密

是否有一种使用密钥对字符串进行编码/解码的方法。 我将使用base64为您提供一个我需要的示例

<?php 

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

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

?>


所以基本上我要求使用密钥/salt,对文本进行编码,然后仅使用相同的密钥将其解码回来。否则会出现错误的输出:)

您可能希望使用PHP的mcrypt扩展

根据您想要做的事情,下面的内容可能有点过火,但如果您保证密钥安全,安全性几乎得到了保证,因为AES尚未被破坏:)

函数enc_aes($str,$key,$iv){
$aes=mcrypt_模块_打开(mcrypt_RIJNDAEL_128',mcrypt_模式_CBC',);
如果(!$aes)死亡(“mcrypt_模块_打开失败!”);
(mcrypt_generic_init($aes,$key,$iv)!=-1)或die(“mcrypt_generic_init failed!”);
//PHP将用块大小的\0到倍数填充查询
$ret=mcrypt_generic($aes,$str);
mcrypt_generic_deinit($aes);
返回$ret;
}
函数dec_aes($str,$key,$iv){
$aes=mcrypt_模块_打开(mcrypt_RIJNDAEL_128',mcrypt_模式_CBC',);
如果(!$aes)死亡(“mcrypt_模块_打开失败!”);
(mcrypt_generic_init($aes,$key,$iv)!=-1)或die(“mcrypt_generic_init failed!”);
//PHP将用块大小的\0到倍数填充查询
$ret=mdecrypt_通用($aes,$str);
mcrypt_generic_deinit($aes);
返回$ret;
}
//将键和IV指定为十六进制。显然,在源代码中这样做是相当不安全的。。。
//比如说。密钥是128位
$key=pack(“H*”,“0123456789ABCDEFFEDBCA9876543210”);
//比如说。初始化向量为64位
$iv=包装(“H*”,“0123456789ABCDEF”);
$encrypted_string=enc_aes(“解密字符串”,$key,$iv);
//应输出“解密字符串”:
打印(dec_aes($encrypted_string,$key,$iv));

您可能希望使用PHP的mcrypt扩展

根据您想要做的事情,下面的内容可能有点过火,但如果您保证密钥安全,安全性几乎得到了保证,因为AES尚未被破坏:)

函数enc_aes($str,$key,$iv){
$aes=mcrypt_模块_打开(mcrypt_RIJNDAEL_128',mcrypt_模式_CBC',);
如果(!$aes)死亡(“mcrypt_模块_打开失败!”);
(mcrypt_generic_init($aes,$key,$iv)!=-1)或die(“mcrypt_generic_init failed!”);
//PHP将用块大小的\0到倍数填充查询
$ret=mcrypt_generic($aes,$str);
mcrypt_generic_deinit($aes);
返回$ret;
}
函数dec_aes($str,$key,$iv){
$aes=mcrypt_模块_打开(mcrypt_RIJNDAEL_128',mcrypt_模式_CBC',);
如果(!$aes)死亡(“mcrypt_模块_打开失败!”);
(mcrypt_generic_init($aes,$key,$iv)!=-1)或die(“mcrypt_generic_init failed!”);
//PHP将用块大小的\0到倍数填充查询
$ret=mdecrypt_通用($aes,$str);
mcrypt_generic_deinit($aes);
返回$ret;
}
//将键和IV指定为十六进制。显然,在源代码中这样做是相当不安全的。。。
//比如说。密钥是128位
$key=pack(“H*”,“0123456789ABCDEFFEDBCA9876543210”);
//比如说。初始化向量为64位
$iv=包装(“H*”,“0123456789ABCDEF”);
$encrypted_string=enc_aes(“解密字符串”,$key,$iv);
//应输出“解密字符串”:
打印(dec_aes($encrypted_string,$key,$iv));

关于使用Mcrypt库进行加密的教程:

以及关于PHP加密的更深入教程:


警告:加密很难正确执行。如果这只是简单的,那么酷,但如果你实际上是试图存储敏感信息,那么你真的应该考虑使用软件,如处理非对称加密为您。有一个用于与GnuPG接口的教程。

关于使用Mcrypt库进行加密的教程:

以及关于PHP加密的更深入教程:

警告:加密很难正确执行。如果这只是简单的,那么酷,但如果你实际上是试图存储敏感信息,那么你真的应该考虑使用软件,如处理非对称加密为您。与GnuPG接口有一个简单的方法。

Mcrypt完成这项工作

然而,如果你想要一些不那么复杂的东西,你可以用你的
$secret
对它进行异或
$string
对称加密,然后用base64_encode对它进行编码。 现在,如果您想要
$string
的真实内容,只需对其进行解码(base64_decode),然后使用相同的
$secret

Mcrypt再次对其进行异或运算即可

然而,如果你想要一些不那么复杂的东西,你可以用你的
$secret
对它进行异或
$string
对称加密,然后用base64_encode对它进行编码。
现在,如果您想要
$string
的真实内容,只需对其进行解码(base64_decode)并使用相同的
$secret

再次对其进行异或运算,这不是编码而是加密…这不是编码而是加密。。。
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) );