首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP加密字符集问题

PHP加密字符集问题
EN

Stack Overflow用户
提问于 2013-11-20 13:00:29
回答 1查看 1.5K关注 0票数 1

我希望能够以加密形式从服务器B检索数据,并在服务器A上对其进行本地解密。

在服务器A上,我有一个页面,其中包含键值和文件名值的表单输入,表单发布到同一页面。输入这些值后,我接受文件名值,然后构建一个fopen字符串到Server,通过fgets读取文件的文本,然后使用键值对其进行解密,将其返回给AES类

服务器A上的表单页是通过meta charset标记编码的utf-8 .服务器B上的文件是一个utf-8编码的txt文件.

当只处理本地值(不使用表单或任何东西)时,一切都很好:

代码语言:javascript
复制
$original = "this is my string";
$original_encrypted = $aes->encrypt($original);
$return = "<p>Original, encrypted: ".$original_encrypted."</p>";
$return.= "<p>Original: ".$aes->decrypt($original_encrypted)."</p>";
echo  $return;

//prints:
Original, encrypted: ѶIQ��SҨ�$��� ,O�������~ f
Original: this is my string

但是,如果我接受加密的字符串ѶIQ��SҨ�$��� ,O�������~ f并将其放在服务器B上的txt文件中:

代码语言:javascript
复制
function retrieve_data($filename) {
    //... some validation
    $file=fopen("http://serverB/authorisation/logs/$filename.txt","r");
        while (($line = fgets($file)) !== false) {
            $parts.=stripslashes(trim($line));
        }
    fclose($file);
    return $parts;
}

//... some key validation
$z = "A3C56F83425746B4D62F984".$key; // 256-bit key
$aes = new AES($z);

$data = retrieve_data(stripslashes(trim($_POST['filename'])));
$return = "<p>Remote, Encrypted, Text: ".$data."</p>";
$return.= "<p>Now Plain Text: ".$aes->decrypt($data)."</p>";
echo $return;

//prints:
Remote, Encrypted, Text: ѶIQ��SҨ�$��� ,O�������~ f

Now Plain Text: B\�%;�`��]��\mb���q�)� �E�������l�����P�V+c�Ah�@ƶ>yq

为什么会这样呢?给定相同的加密字符串,我得到两个不同的输出。我只能想象,这个字符集有一些问题,它正在改变某个方面的值。

如果我将表单页的加密更改为ISO-8859-1,则加密的字符串将变为ѶIQ’°SÒ¨á$«Îà ,OþÆÿ‡ÿè~ f。当我试图将远程txt文件的编码更改为ISO,并在那里复制该字符串时,cPanel告诉我有些字符与ISO不兼容,并将我引导回UTF-8。然后,我尝试将serverA保留为ISO,但将mb_convert_encodingutf8-encode / utf8-decode转换到传入/传出数据,但没有工作结果。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-20 13:08:26

加密的字符串是伪随机二进制噪声。它作为可见字符没有任何意义,因为它不代表任何文本编码。如果将字符串显示为字符,则会得到一些随机垃圾,这些垃圾可能缺少单个字节,也可能没有更改字符。如果您复制并粘贴到另一个文件中,则无法保证您将得到相同的二进制数据。

不要将加密的字符串视为可读的文本。相反,把它写进一个文件,复制那个文件,不要碰它。如果您需要二进制数据作为一个复制和可压缩字符串,base64_encode它.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20096689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档