加密数据未插入mysql表

时间:2013-05-09 21:38:22

标签: php mysql mcrypt

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

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脚本来转换纯文本列&amp;使用加密结果更新另一列:

$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());
  }

它运行没有错误&amp;打印出一堆加密的字符串,正如我所期望的那样,但是当我查看表中的数据时,没有任何记录使用上面的php打印的相同数据进行更新。相反,Str2中的大多数值都是空白的,其中有一个或两个字符。

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

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

为什么我的表格没有使用正确的数据进行更新?

编辑我已经使用基本编码/解码NewCryptStr函数的输出/输入解决了问题。我仍然很想知道为什么当单独执行sql语句时,我的循环不能正常工作。

1 个答案:

答案 0 :(得分:1)

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

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

使用:

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