我如何在Javascript中base64编码数据(不是字符串)?

use*_*435 5 javascript iphone base64 encoding

我将功能从Objective-C iPhone应用程序移植到Javascript iPhone应用程序(Appcelerator Titanium).在Objective-C中,我有一个表示此标记的NSData对象:

//NSData object printed to the console:
<0cd9f571 b0e66e6d ca410d12 f67a404a 7e64b9b5 d2483fd9 63a9267b 1c7609e2>
Run Code Online (Sandbox Code Playgroud)

它不是一个字符串,它是一个NSData对象 - 一个面向对象的字节缓冲区包装器.当我对base64进行编码时,得到了这个结果:

//base64 encoded NSData object
DNn1cbDmbm3KQQ0S9npASn5kubXSSD/ZY6kmexx2CeI=
Run Code Online (Sandbox Code Playgroud)

在我的javascript实现中,我有一个相同标记的字符串表示.它看起来像这样:

//string version of the token in my javascript implementation
0cd9f571b0e66e6dca410d12f67a404a7e64b9b5d2483fd963a9267b1c7609e2
Run Code Online (Sandbox Code Playgroud)

当我在javascript中base64编码字符串对象时,我得到这个结果:

//base64 encoded token (string) in javascript
MGNkOWY1NzFiMGU2NmU2ZGNhNDEwZDEyZjY3YTQwNGE3ZTY0YjliNWQyNDgzZmQ5NjNhOTI2N2IxYzc2MDllMg==
Run Code Online (Sandbox Code Playgroud)

问题是,我发布的Web服务不需要base64编码的字符串,它需要base64编码的数据!我怎么能用javascript做到这一点?

Ada*_*ent 0

您需要将原始十六进制字符串作为整数列表读取。请参阅如何在 JavaScript 中将十进制转换为十六进制?

然后,您需要修改众多 base64 js 算法之一以使用整数而不是charCodeAt。请参阅http://www.webtoolkit.info/javascript-base64.html 另请参阅http://www.codeproject.com/KB/cs/base64encoder.aspx这是一个直接整数到base64 算法(大多数是字节或字符串到64 进制)。

即使最后一个示例是 C#,您也应该能够将其转换为 JS。

如果以后有时间我会看看是否可以编写代码。