dpdfh60088 2012-10-25 10:45
浏览 14
已采纳

PHP中的加密会留下不需要的字符

I have made an encryption function which encrypts a simple value and stores it in the database. Here is the code to encrypt and decrypt:

public function encrypt($string){
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $value = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->key256, $string, MCRYPT_MODE_ECB, $iv);
    $value = base64_encode($value);
    return $value;
}

public function decrypt($string){
    $value = base64_decode($string);
    $value = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->key256, $value, MCRYPT_MODE_ECB);
    return $value;
}

When I encrypt a simple value such as 'Michael' and decrypt again, I get the value:

Michael���������

Is there a reason I get all those question marks or a way to get rid of them?

  • 写回答

2条回答 默认 最新

  • douhao2548 2012-10-25 10:58
    关注

    In my experience, those extra character are NULL-bytes used for padding, that has been preserved after decryption.

    You should try changing your decrypt() function to:

    public function decrypt($string){
        $value = base64_decode($string);
        $value = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->key256, $value, MCRYPT_MODE_ECB);
        return trim($value, "\0");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看