编码函数输出中不可读的文本

时间:2016-10-15 17:40:15

标签: php encoding

我正在使用函数对某些文本进行编码和解码, 但似乎它不支持我的国家语言(波斯语)并将它们更改为一些不可读的文本,我该如何修复它。

<?php                
class encrypt {
    /********* Encode *********/
    public static function encode($pure_string, $encryption_key) {
        $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, md5(base64_encode(trim($encryption_key))), utf8_encode(trim($pure_string)), MCRYPT_MODE_ECB, $iv);
        return base64_encode($encrypted_string);
    }

    /********** Decode ************ */
    public static function decode($encrypted_string, $encryption_key) {
        $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, md5(base64_encode(trim($encryption_key))),base64_decode(trim($encrypted_string)), MCRYPT_MODE_ECB, $iv);
        return $decrypted_string;
    }

}
?>

1 个答案:

答案 0 :(得分:0)

  1. 同样的IV需要用于加密和解密,一般的方法是在加密数据前加上IV,以便在解密过程中使用。

  2. 无需对Base64进行编码或修剪加密密钥。

  3. 不要修剪加密数据,加密数据可以包含空(0x00)字节。

  4. 加密操作的是字节,而不是字符,因此任何文本语言都没有区别。

  5. 将调用内联添加到其他调用只会使调试更加困难,将步骤分成带有中间变量的单独语句。

  6. 不要使用Blowfish,使用AES,即使是Blowfish的创建者也使用AES。

  7. 不要使用ECB模式,不安全,请参阅ECB模式,向下滚动到企鹅。

  8. ECB模式不使用IV。

  9. 您正在做的是加密,而不是编码。

  10. 考虑使用defuseRNCryptor,它们提供了完整的解决方案并正在维护。