混淆或加密了一些用PHP纯文本数据(obfuscate or encrypt some plain

2019-07-29 06:17发布

我需要混淆或在我的PHP 5.2的应用程序加密一些纯文本数据。

我宁愿这将对输入字符串输出字符串保留相同长度的解决方案。

这并不需要非常强的,因为有到位的安全的许多其他层。 强大的将是一件好事,但是这将只是保持程序员/ DBA /技术支持人员的/ etc意外地从数据库中读取文本。

关键因素

  • 编辑ADD我宁愿将有输入字符串输出字符串保留相同长度的解决方案。
  • 只有字符串文本将被混淆/在数据库加密存储
  • PHP应用程序都需要进行模糊处理/加密数据之前,数据库保存,并需要取消模糊处理/ dencrypt以下数据库中读取
  • 这是对现有应用程序的修改
  • 只有一些列需要进行模糊处理/加密
  • 只有一些行需要根据类型字段被扰乱/加密,
  • 只有少数加载/保存点处理
  • 最大列尺寸已经确定了一些领域,但不是为别人,但我更喜欢一个解决受限领域的现有大小内工作
  • 编辑,添加的关键将是可能是一些主键信息+不可编辑的字段的复合

这里是一个示例数据库表和数据:

int           char(1) varchar(24)              int      date
MyPrimaryKey  RowType UserText                 UserNo   DateChange
------------  ------- ------------------------ -------- ----------------
1             N       nothing special here     43       6/20/2009 12:11am
2             N       same thing, wow!         78       6/23/2009 1:03pm
3             S       fBJKg}.jkjWfF78dlg@45kjg 43       6/25/2009 6:45am
4             N       same old, same old text  21       6/25/2009 8:11am

该应用程序将加载和显示行1,2和4通常。 然而这将有条件地(基于行类型)处理使用这种模糊处理/加密和未模糊处理在第3行的文字/解密逻辑。

任何人都可以提供模糊处理/加密和未模糊处理/解密功能的代码,链接,或指针,这将有助于在这里?

谢谢!

编辑
我喜欢编码的想法简单的base64,但有,可以保持一个固定大小中的数据的方法。 列出的所有方法,至今有超过输入值时的输出值。 这将是对于某些列,其中用户可以在50个字符输入一个问题,它被存储在一个varchar(50)柱上。

Answer 1:

对于简单的混淆使用strtr函数的效率() - 翻译某些字符:
strtr函数的效率 (字符串$海峡,从字符串$,$弦向)

在PHP编码:

$readable='This is a special test string ABC123 ([+,-!#$%&*])';    
$unreadable=strtr($readable,' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
                           ,'¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ '
                      );
print $unreadable; //outputs: "ÕéêôAêôAâAôñæäêâíAõæôõAôõóêïèAÂÃIJ³´A©Ü¬­®¢¤¥¦§«Þª"

在PHP解码:

$unreadable='ÕéêôAêôAâAôñæäêâíAõæôõAôõóêïèAÂÃIJ³´A©Ü¬­®¢¤¥¦§«Þª';
$readable=strtr($unreadable,'¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ '
                           ,' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'

               );
print $readable; //outputs: "This is a special test string ABC123 ([+,-!#$%&*])"

可以很容易地在必要时(不循环)复制此逻辑在DB: 使用数字的表,通过厄兰Sommarskog



Answer 2:

如何base64编码 ? 我们用用它来使我们的短信网关DB短信不可读由开发商。



Answer 3:

有几个选项。

如果你想很强大,你可以看看mcrypt的。

但是,如果它只有这么工作的开发人员不能没有一些工作,阅读文本,以真正做到这一点。 然后,你可以只Base64编码,它或对其进行uuencode



Answer 4:

如果你已经安装的mcrypt(我当前所有的PHP环境都有),你可以使用mcrypt_encrypt和mcrypt_decrypt是这样的:

function encrypt ($text) {
  global $key;
  return mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, "abcdefghijklmnopqrstuvwxyz012345");
}

function decrypt ($secret) {
  global $key;
  return rtrim (mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $key, $secret, MCRYPT_MODE_ECB, "abcdefghijklmnopqrstuvwxyz012345"), "\0");
}

它采用了全球$key和AES(非常强)。

缺点是性能(相比于类似的Base64简单的),并且你总得要解决的关键。

干杯,



Answer 5:

试试这些PHP函数convert_uuencode和convert_uudecode :

function encrypt_decrypt ($data, $encrypt) {
    if ($encrypt == true) {
        $output = base64_encode (convert_uuencode ($data));
    } else {
        $output = convert_uudecode (base64_decode ($data));
    }
    return $output;
}

$enc_txt = encrypt_decrypt ("HELLO DATA", true);
echo $enc_txt."\n"; // KjIkNSwzJFxAMSQlNDAwYGAKYAo=
echo encrypt_decrypt ($enc_txt, false); // HELLO DATA


Answer 6:

如果你使用大约5 MySQL版本,那么你甚至不需要太多的PHP它,你可以做到这一点与MySQL字符串函数查询内部encrypt(text, password)decrypt(text, password)

http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html

  • DECODE(crypt_str,pass_str)

    解密的crypt_str使用pass_str作为密码加密的字符串。 的crypt_str应该从ENCODE返回的字符串()。

  • ENCODE(str,pass_str)

    str加密使用pass_str作为密码。 要解密结果,使用DECODE()。

    结果是相同的长度STR的二进制字符串。

    加密的强度是根据随机数发生器有多好。 它应该足够短字符串。

更新:另一种可能性是rot13 ^^



Answer 7:

尝试使用的mcrypt库。 它不包含在标准的PHP,但它很容易下载和很常用。 这里有一个快速教程,你可以用它做什么。

这是最好的,以确保您使用的加密密钥存储在一个安全的地方,但如果你是不是真的担心安全,你可能是OK只是硬编码的钥匙插入你的代码的某个地方。



文章来源: obfuscate or encrypt some plain text data in PHP