php - 未将加密数据插入到 mysql 表中

标签 php mysql mcrypt

我正在尝试将我的加密例程从 des 升级到 blowfish。我有这个加密/解密功能:

function NewCryptStr($EncryptOrDecrypt,$Str)
{
  $Key='test';

  $IVSize=mcrypt_get_iv_size(MCRYPT_BLOWFISH,MCRYPT_MODE_ECB);
  $IV=mcrypt_create_iv($IVSize,MCRYPT_RAND);

  if($EncryptOrDecrypt==='Encrypt')
    {
      $Str=mcrypt_encrypt(MCRYPT_BLOWFISH,$Key,$Str,MCRYPT_MODE_ECB,$IV);
      $Str=mysql_real_escape_string($Str);
    }

  if($EncryptOrDecrypt==='Decrypt')
    $Str=mcrypt_decrypt(MCRYPT_BLOWFISH,$Key,$Str,MCRYPT_MODE_ECB,$IV);

  return $Str;
}

这很好用:

$Str='test string to be encrypted then decrypted';
print "<p>Original $Str</p>\n";
$Str=NewCryptStr('Encrypt',$Str);
print "<p>Encrypted $Str</p>\n";
$Str=NewCryptStr('Decrypt',$Str);
print "<p>Decrypted $Str</p>\n";

然后我在电子邮件地址表上运行以下 php 脚本以转换纯文本列并使用加密结果更新另一列:

$sql="select UID,Str from testdata order by UID";
$result=mysql_query($sql,$Link);

while($row=mysql_fetch_array($result))
  {
    $Encrypted=NewCryptStr('Encrypt',$row[Str]);

    $sql="update testdata set Str2='$Encrypted' where UID=$row[UID]";
    print "<p>$row[Str] > $Encrypted</p>\n";
    print "<p>$sql</p>\n";
    mysql_query($sql,$Link) or die("failed $sql ".mysql_error());
  }

它运行时没有错误,并打印出大量加密字符串,正如我所期望的那样,但是当我查看表中的数据时,没有任何记录已更新为上面 php 打印的相同数据。相反,Str2 中的大多数值都是空白,有些值包含 1 或 2 个字符。

所有打印的 sql 语句看起来都很好,并且单独运行它们会正确更新记录。

sql 表和 mysql 连接都使用 utf8 编码,Str 和 Str2 列是 varchar 数据类型。

为什么我的表没有更新正确的数据?

编辑 我已经解决了(避开!)使用基本编码/解码 NewCryptStr 函数的输出/输入的问题。我仍然很想知道为什么当单独执行 sql 语句时可以愉快地工作时我通过表的循环不起作用。

最佳答案

您的代码中有:$row[UID],它未定义,因此不会更新任何记录。

$row[UID]改为$row['UID'];

使用:

$sql="UPDATE testdata SET Str2='".$Encrypted."' WHERE UID=".$row['UID'];

关于php - 未将加密数据插入到 mysql 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16471580/

相关文章:

php - 使所有页面都以不同的 html 结构表示来自不同表的数据

php - 设计一个 MySQL 数据库,我应该重新考虑它吗?

未找到 PHP 7.1.9 mcrypt 库

php - mcrypt 加密将 s 串 '%00' 添加到字符串末尾

mysql - 如何选择多个行,其中单词的字母不同?

php - 如何在没有fork的情况下在不同函数甚至不同进程之间使用PHP中的命名管道?

php - 如何通过 php 页面检索数据库值到 jquery 自动完成框

php - 将文件从虚拟 Linux 计算机传输到 Digital Ocean 服务器

php - 在 Ruby 中解密 PHP MCRYPT_RIJNDAEL_256

php - Zend 框架和 XML/XSLT 集成