C#里面的Convert.ToBase64String和php里面的base64_encode不一样

发布于 2021-11-25 13:00:34 字数 463 浏览 786 评论 18

C#里面的Convert.ToBase64String(bytes[])  和 php里面的base64_encode的结果不一样

在VS中用C#编码前的数据

编码后的结果:CSfR3aHM6/0N+BZOmPH3yg==

在PHP中:

$a = '939209221161204235253132482278152241247202';

base64_encode($a) = 'OTM5MjA5MjIxMTYxMjA0MjM1MjUzMTMyNDgyMjc4MTUyMjQxMjQ3MjAy';

2次结果为什么不一样?在php中如何写出C#的那种代码?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(18

巡山小妖精 2021-12-02 09:04:35

引用来自“eechen”的评论

@bobdog1986 不知道下面这个是不是你要的所谓的字节数组

<?php

$str = 'abc';

$arr = array();

$len = strlen($str);

for($i=0;$i<$len;$i++) {

    $arr[$i] = ord($str[$i]); //返回字符
ASCII码值

}

print_r($arr);

//输出:

Array

(

    [0] => 97

    [1] => 98

    [2] => 99

)

多彩岁月 2021-12-02 09:04:31

@bobdog1986

在php中的数据

眉黛浅 2021-12-02 09:04:20

你的意思是我直接将ascii码转化为字符串然后再base64_encode?

醉生梦死 2021-12-02 09:02:23

回复
他这个代码是string转换成byte[],是ASCII编码方式。你能自己先搞清楚数据类型吗?byte[]和string,你在c#里面是用的byte[],但是php里面用的string,而且你竟然将byte值从头到尾拼接成string!!

为你鎻心 2021-12-02 09:01:10

回复
比如,按照ascII编码格式,数字97对应char ‘0’,而不是char'97'。c#里面byte[0]=9,不能直接转换成字符串“9”懂吗?!根本不是一回事

疾风者 2021-12-02 09:00:19

@bobdog1986 不知道下面这个是不是你要的所谓的字节数组

<?php

$str = 'abc';

$arr = array();

$len = strlen($str);

for($i=0;$i<$len;$i++) {

    $arr[$i] = ord($str[$i]); //返回字符
ASCII码值

}

print_r($arr);

//输出:

Array

(

    [0] => 97

    [1] => 98

    [2] => 99

)

可是我不能没有你 2021-12-02 08:50:57

http://stackoverflow.com/questions/885597/string-to-byte-array-in-php 你能自己找找吗?随便一搜都能找到的。 另外,你这是ascII格式吗?在c#里面转成string?还是php?

累赘 2021-12-02 08:50:06

回复
这个只是获取字符的ascii码啊,在c
#中数据表现为十进制,PHP中我获取到的是字符串,C#的Convert.ToBase64String的行为是将十进制字节流转化为字符串在进行base64编码?

北笙凉宸 2021-12-02 08:40:14

回复
你原文c#里是一个byte[]{9,39,......},但php里是string=“939...”,这俩根本就不是一回事好吗!!你首先都做成一个类型,c#里面最早的数据来源也是byte[]吗?还是1个string但是你给转换成byte[]?这就涉及编码方式了,来回转换是要有编码类型要求的。

叹沉浮 2021-12-02 08:25:35

回复
C#的数据来源就是byte[],因为C#中的一些算法和php中的不太一样,在php中我改造了一些,php中可以获取到类似的一个数组,只是类型是字符串,现在就是卡在类型转换上面了,不然没办法经base64的

离不开的别离 2021-12-02 08:21:53

引用来自“bobdog1986”的评论

http://php.net/manual/zh/function.base64-encode.php

这里面给了一个例子:

#0000BB;background-color:#FFFFFF;"><?php
$str #007700;background-color:#FFFFFF;">= #DD0000;background-color:#FFFFFF;">'This is an encoded string'#007700;background-color:#FFFFFF;">;
echo #0000BB;background-color:#FFFFFF;">base64_encode#007700;background-color:#FFFFFF;">(#0000BB;background-color:#FFFFFF;">$str#007700;background-color:#FFFFFF;">);
#0000BB;background-color:#FFFFFF;">?>

所以你的$a = '939209221161204235253132482278152241247202';

php程序里面会当做是一个字符串。而在c#里面,是一个byte[],所以你可以在c#里面先把那个byte[]转换成string,再在php里$a =c#里面的string,应该就正确了。

下面是c#把byte[]转换成string的方法,和你的编码是有关系的。

http://stackoverflow.com/questions/11654562/how-convert-byte-array-to-string

如果是用utf-8:

string convert = "This is the string to be converted";

// From string to byte array
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(convert);

// From byte array to string
string s = System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length);

酒几许 2021-12-02 08:20:07

CSharp那么高大上的语言,我这个PHP草根不会呀.

回眸一笑 2021-12-02 07:44:37

回复
php里面byte[]和string转换不会?

秋意浓 2021-12-02 05:01:46

请php专家来帮你一下。
@eechen

妖妓 2021-12-01 13:09:58

只是单纯的将bytes下数字进行拼接了一下

緦唸λ蓇 2021-12-01 10:59:15

回复
按我下面的方法,先把byte[]转换成string,在php里面$a=string;

岁月打碎记忆 2021-12-01 08:06:42

虽然我不懂php,但是大哥,你这
$a = '
939209221161204235253132482278152241247202
';什么玩意啊?!鬼知道byte[]都是对应的哪一个?你这样直接base64_encode($a),估计是当做9-3-9-2.....这样的byte[]了,你得先转换成正确的byte[]吧。就像c#里面一样

爱的故事 2021-11-30 22:41:28

http://php.net/manual/zh/function.base64-encode.php

这里面给了一个例子:

#0000BB;background-color:#FFFFFF;"><?php
$str #007700;background-color:#FFFFFF;">= #DD0000;background-color:#FFFFFF;">'This is an encoded string'#007700;background-color:#FFFFFF;">;
echo #0000BB;background-color:#FFFFFF;">base64_encode#007700;background-color:#FFFFFF;">(#0000BB;background-color:#FFFFFF;">$str#007700;background-color:#FFFFFF;">);
#0000BB;background-color:#FFFFFF;">?>

所以你的$a = '939209221161204235253132482278152241247202';

php程序里面会当做是一个字符串。而在c#里面,是一个byte[],所以你可以在c#里面先把那个byte[]转换成string,再在php里$a =c#里面的string,应该就正确了。

下面是c#把byte[]转换成string的方法,和你的编码是有关系的。

http://stackoverflow.com/questions/11654562/how-convert-byte-array-to-string

如果是用utf-8:

string convert = "This is the string to be converted";

// From string to byte array
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(convert);

// From byte array to string
string s = System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文