Encoding Base64编码和解码

Encoding Base64编码和解码,encoding,character-encoding,cryptography,base64,Encoding,Character Encoding,Cryptography,Base64,如果有人能给我解释一下,我将不胜感激 我遇到了这个不重要的引用,看到一个用base64编码的令牌,那个家伙在那里解码了它 EYl0htUzhivYzcIo+zrIyEFQUE1PQkk= -> t3+(:APPMOBI 然后,我再次尝试使用base64对t3+:APPMOBI进行编码,以查看是否会得到相同的结果,但非常惊讶地发现: t3+(:APPMOBI - > dDMrKDpBUFBNT0JJ 完全不同的标记 然后,我尝试解码原始令牌EYl0htUzhivYzcIo+zrIy

如果有人能给我解释一下,我将不胜感激

我遇到了这个不重要的引用,看到一个用base64编码的令牌,那个家伙在那里解码了它

EYl0htUzhivYzcIo+zrIyEFQUE1PQkk= -> t3+(:APPMOBI
然后,我再次尝试使用base64对t3+:APPMOBI进行编码,以查看是否会得到相同的结果,但非常惊讶地发现:

t3+(:APPMOBI - > dDMrKDpBUFBNT0JJ
完全不同的标记

然后,我尝试解码原始令牌EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=并获得t3+:APPMOBI,其中包含随机字符。我得到了◄ëtå╒3å+╪═┬√:╚╚阿普莫比可能错了,我很快就从头做起了


如果令牌不应该相同,那么它们之间的差异是什么原因?

问题在于向您显示输出的编码,或者您用于向base64输入数据的编码。这实际上是base64编码的发明帮助解决的问题

与其尝试复制和粘贴非ASCII字符,不如将输出保存为二进制文件,然后进行检查。然后,对二进制文件进行编码。您将看到相同的base64字符串

c:\TEMP>type b.txt
EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=

c:\TEMP>base64 -d b.txt > b.bin

c:\TEMP>od -t x1 b.bin
0000000 11 89 74 86 d5 33 86 2b d8 cd c2 28 fb 3a c8 c8
0000020 41 50 50 4d 4f 42 49

c:\TEMP>base64 -e b.bin
EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=
od是一个八进制转储工具,它使用十六进制表示法输出二进制数据,并显示每个字节

编辑:

您在注释中询问了一个不同的字符串dDMrKDpBUFBNT0JJ,为什么它会被解码为相同的东西?嗯,它不能解码成相同的东西。它解码成这个字节串:74332b283a41504d4f4249。您的原始字符串解码为这个字节字符串:11 89 74 86 d5 33 86 2b d8 cd c2 28 fb 3a c8 c8 41 50 50 4d 4f 42 49

注意区别:原始字符串解码为23字节,第二个字符串仅解码为12字节。原始字符串包括非ASCII字节,如11、d5、d8、cd、c2、fb、c8、c8。这些字节在每个系统上的打印方式不同。您将它们称为随机字节,但它们不是。它们是数据的一部分,base64旨在确保它们能够被传输

我认为,要理解这些字符串为何不同,首先需要了解字符数据的性质、base64是什么以及它存在的原因。记住,计算机只处理数字,但人们需要处理熟悉的概念,如字母和数字。所以ASCII被创建为一种编码标准,它代表一个小数字,我们称这个小数字为字母或数字的字节,这样我们人类就可以读取它。如果我们把一组字节排成一行,我们就可以拼出一条信息。41 50 50 4d 4f 42 49是表示单词APPMOBI的字节。我们把这样的一组字节称为字符串

A-Z中的每个字母和0-9中的每个数字都有一个ASCII指定的数字来表示它。但有许多额外的数字不在标准中,而且并非所有这些数字都代表可见或合理的字母或数字。我们说它们是不可打印的。较长的消息包含许多无法打印的字节,您称之为随机字节

当像电子邮件这样的计算机程序处理字符串时,如果字节是可打印的ASCII字符,就很容易了。电子邮件程序知道如何处理它们。但是,如果您的字节代表一幅图片,那么这些字节的值可能不是ASCII,而且各种电子邮件程序都不知道如何处理它们。创建Base64是为了获取所有类型的字节,包括可打印字节和不可打印字节,并将它们转换为仅表示可打印字母的字节字符串。因为它们都是可打印的,所以像电子邮件或web服务器这样的程序可以轻松地处理它们,即使它不知道它们实际上包含图片

以下是新字符串的解码:

c:\TEMP>type c.txt
dDMrKDpBUFBNT0JJ

c:\TEMP>base64 -d c.txt
t3+(:APPMOBI
c:\TEMP>base64 -d c.txt > c.bin

c:\TEMP>od -t x1 c.bin
0000000 74 33 2b 28 3a 41 50 50 4d 4f 42 49
0000014

c:\TEMP>type c.bin
t3+(:APPMOBI
c:\TEMP>

问题在于向您显示输出的编码,或者用于将数据输入base64的编码。这实际上是base64编码的发明帮助解决的问题

与其尝试复制和粘贴非ASCII字符,不如将输出保存为二进制文件,然后进行检查。然后,对二进制文件进行编码。您将看到相同的base64字符串

c:\TEMP>type b.txt
EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=

c:\TEMP>base64 -d b.txt > b.bin

c:\TEMP>od -t x1 b.bin
0000000 11 89 74 86 d5 33 86 2b d8 cd c2 28 fb 3a c8 c8
0000020 41 50 50 4d 4f 42 49

c:\TEMP>base64 -e b.bin
EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=
od是一个八进制转储工具,它使用十六进制表示法输出二进制数据,并显示每个字节

编辑:

您在注释中询问了一个不同的字符串dDMrKDpBUFBNT0JJ,为什么它会被解码为相同的东西?嗯,它不能解码成相同的东西。它解码成这个字节串:74332b283a41504d4f4249。您的原始字符串解码为这个字节字符串:11 89 74 86 d5 33 86 2b d8 cd c2 28 fb 3a c8 c8 41 50 50 4d 4f 42 49

注意区别:原始字符串解码为23字节,第二个字符串仅解码为12字节。原始字符串包括非ASCII字节,如11、d5、d8、cd、c2、fb、c8、c8。这些字节在每个系统上的打印方式不同。您将它们称为随机字节,但它们不是。它们是数据的一部分,base64旨在确保它们能够被传输

我想应该理解 为什么这些字符串不同,您首先需要了解字符数据的性质,base64是什么,以及它存在的原因。记住,计算机只处理数字,但人们需要处理熟悉的概念,如字母和数字。所以ASCII被创建为一种编码标准,它代表一个小数字,我们称这个小数字为字母或数字的字节,这样我们人类就可以读取它。如果我们把一组字节排成一行,我们就可以拼出一条信息。41 50 50 4d 4f 42 49是表示单词APPMOBI的字节。我们把这样的一组字节称为字符串

A-Z中的每个字母和0-9中的每个数字都有一个ASCII指定的数字来表示它。但有许多额外的数字不在标准中,而且并非所有这些数字都代表可见或合理的字母或数字。我们说它们是不可打印的。较长的消息包含许多无法打印的字节,您称之为随机字节

当像电子邮件这样的计算机程序处理字符串时,如果字节是可打印的ASCII字符,就很容易了。电子邮件程序知道如何处理它们。但是,如果您的字节代表一幅图片,那么这些字节的值可能不是ASCII,而且各种电子邮件程序都不知道如何处理它们。创建Base64是为了获取所有类型的字节,包括可打印字节和不可打印字节,并将它们转换为仅表示可打印字母的字节字符串。因为它们都是可打印的,所以像电子邮件或web服务器这样的程序可以轻松地处理它们,即使它不知道它们实际上包含图片

以下是新字符串的解码:

c:\TEMP>type c.txt
dDMrKDpBUFBNT0JJ

c:\TEMP>base64 -d c.txt
t3+(:APPMOBI
c:\TEMP>base64 -d c.txt > c.bin

c:\TEMP>od -t x1 c.bin
0000000 74 33 2b 28 3a 41 50 50 4d 4f 42 49
0000014

c:\TEMP>type c.bin
t3+(:APPMOBI
c:\TEMP>

base64编码的全部目的是将二进制数据编码为文本表示,以便它们可以在网络上传输或显示而不会损坏。但讽刺的是,这发生在你提到的原始帖子上

EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=未解码为t3+:APPMOBI

相反,它包含一些二进制字节,而不是您正确显示的随机字节。因此,问题是由于作者或她/他使用的工具/浏览器清理了原始帖子,或者破坏了解码的二进制数据

如果使用相同的基,即编码文本使用相同的字符集,则编码和解码数据之间始终存在一对一的关系


t3+:APPMOBI确实将被编码到dDMrKDpBUFBNT0JJ中

base64编码的全部目的是将二进制数据编码到文本表示中,以便它们可以通过网络传输或显示而不会损坏。但讽刺的是,这发生在你提到的原始帖子上

EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=未解码为t3+:APPMOBI

相反,它包含一些二进制字节,而不是您正确显示的随机字节。因此,问题是由于作者或她/他使用的工具/浏览器清理了原始帖子,或者破坏了解码的二进制数据

如果使用相同的基,即编码文本使用相同的字符集,则编码和解码数据之间始终存在一对一的关系


t3+:APPMOBI确实将被编码到dDMrKDpBUFBNT0JJ中

可能是在他复制粘贴该令牌时过滤了不可打印的字符?我复制并粘贴◄ëtå╒3å+╪═┬√:╚╚APPMOBI解码了令牌,所有东西都显示出来了。所有字符都在ASCII表中。@J2D8T实际上,0x7F以上的任何字节在中都是无效的。可能是他复制粘贴该标记时过滤了不可打印的字符?我复制并粘贴了◄ëtå╒3å+╪═┬√:╚╚APPMOBI解码了令牌,所有东西都显示出来了。所有字符都在ASCII表中。@J2D8T实际上,0x7F以上的任何字节在中都是无效的。如果您通过运行EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=或dDMrKDpBUFBNT0JJ,它会告诉您t3+:APPMOBI为什么不同令牌的结果相同?具有讽刺意味的是,base64decode.org也有同样的问题,无法正确显示二进制数据。我知道,这很难相信。如果它回答了你的问题,你能给我投票吗。我试图得到50分以上,这样我就可以对其他问题发表评论。谢谢。如果你运行EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=或dDMrKDpBUFBNT0JJ,它会给你t3+:APPMOBI为什么不同令牌的结果相同?具有讽刺意味的是,base64decode.org也有同样的问题,无法正确显示二进制数据。我知道,这很难相信。如果它回答了你的问题,你能给我投票吗。我试图得到50分以上,这样我就可以对其他问题发表评论。谢谢。我没有从那篇文章中复制粘贴的原始令牌。我试着自己解码它作为一个练习,看看我是否会得到同样的结果,就像我在对另一个答案的评论中所说的那样。如果您通过base64decode.org运行EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=或dDMrKDpBUFBNT0JJ,它将为您提供t3+:APPMOBI为什么不同令牌的结果相同?我没有从中复制和粘贴的原始令牌 t post。我试着自己解码它作为一个练习,看看我是否会得到同样的结果,就像我在对另一个答案的评论中所说的那样。如果您通过base64decode.org运行EYl0htUzhivYzcIo+zrIyEFQUE1PQkk=或dDMrKDpBUFBNT0JJ,它将为您提供t3+:APPMOBI为什么不同令牌的结果相同?