当您拥有需要通过ascii通道发送的二进制数据时,您使用什么文本编码方案?

Pau*_*and 7 base64 encoding hex base85

如果您有需要编码的二进制数据,您使用的编码方案是什么?

我知道:

  • 十六进制编码.非常简单,但非常详细,将一个字节扩展为两个字节.
  • 基地64.最常见的,不是那么冗长,将三个字节扩展到四个字节.
  • 基地85.不常见,再次冗长,将四个字节扩展为五个字节.

是否有其他常用的编码方案?如果是这样,有什么优点和缺点?

编辑:这很有用,例如,当尝试在cookie中存储任意数据时.Cookie只能存储文本,而不能存储任意数据,因此您需要以某种方式对其进行转换,最好是将其转换回来.此外,假设您正在使用无状态服务器,以便您无法在服务器上保存状态,只需将标识符放入cookie即可.当然,如果你这样做,你还需要一些方法来验证用户传递给你的是你传递给用户的内容,例如签名.

此外,由于目前的共识是你应该使用base64,因为它很普遍,我也会指出这我使用的...我只是好奇,如果有人使用其他任何东西,如果是这样,为什么.

编辑:万一有人偶然发现,如果您确实想使用Base64将数据存储在cookie中,则需要使用修改后的Base64实现.看到这个答案的原因.

ska*_*man 13

要编码cookie值,您需要小心.看到这个较旧的答案:

对于版本0 cookie,值不应包含空格,括号,括号,等号,逗号,双引号,斜杠,问号,符号,冒号和分号.在所有浏览器上,空值的行为可能不同.

Base64编码可以=为某些输入生成符号,这在技术上不允许在cookie中(版本0 cookie,无论如何,这是最广泛支持的).在实践中,我怀疑它的=实际效果会很好,但也许不行.

我建议绝对确保您的编码二进制文件与cookie兼容,然后基本的十六进制编码是最安全的(例如在java中).

编辑:正如@Paul所指出的那样,Base 64修改版本是"URL安全"(我认为,"cookie安全").使用标准算法的修改版本会淡化其魅力,请注意.

编辑:@shoosh指出,它=仅用于表示base64字符串的结尾,因此您可以修剪=,设置cookie,然后=在需要解码时再次重新附加.