【问题标题】:Decoding string in base 64以 base 64 解码字符串
【发布时间】:2014-06-16 11:56:04
【问题描述】:

我需要解码一个 base 64 字符串。为此,我使用以下代码:

// Get the base 64 string vector.
NSString *vector64String = insertRequestDictionnary[@"check"];
// Decode the base 64 string into data.
NSData *vector64Data = [NSData dataFromBase64String: vector64String];
// Get the string from decoded data.
NSString *decodeVector = [[NSString alloc] initWithData: vector64Data
                                               encoding: NSUTF8StringEncoding];

..但是每次我得到一个零字符串(decodeVector)。 我检查了这个网站(http://www.base64decode.org/),我的第一个字符串(vector64string)是基数 64。例如:“h508ILubppN1xLpmXWLfnw==”给出“

谢谢。

【问题讨论】:

  • 你能提供更多关于这个“向量”的信息,它是什么产生的,它的用途是什么?从这个 base 64 字符串中提取的 NSData 不是 UTF8 字符串(如果是,它可能一开始就没有 base 64 编码)。但是,如果没有一点关于原始向量是什么的背景信息,就很难就如何解释生成的二进制数据提供建议。
  • 向量是一个键。我试图在 iOS 和 PHP 之间进行 AESCrypt 解密:服务器向我发送加密消息和密钥(vector64String)。要解密消息,我使用一种方法并将此密钥作为参数。但我首先需要解码这个以 64 为基数的密钥。
  • 我不确定您在 iOS 端使用的是什么,但 AES 加密通常不要求密钥是字符串。看起来这是一个 16 字节的二进制密钥。

标签: ios iphone objective-c base64


【解决方案1】:

并非所有数据都是 NSUTF8String。 Base64 的要点是创建一个自然不是字符串的数据的字符串表示形式。

NSString *vector64String = @"h508ILubppN1xLpmXWLfnw==";
NSData *vector64Data = [[NSData alloc] initWithBase64EncodedString:vector64String options:0];
NSLog(@"vector64Data: %@", vector64Data);

NSLog 输出:

vector64Data:

vector64Data解码后的base64字符串。

vector64Data 不是 UTF8 字符串,它只是数据。

【讨论】:

  • 所以你的意思是我最后总是有一个 nil 字符串(decodeVector)?
  • 有了这个数据是的。但是您尝试做的事情是不正确的。你想达到什么目的?对 Base64 做一些研究,为什么使用它,数据是什么。
  • vector64String 是一个密钥,以 64 进制编写。我只需要解码 vector64String 并获取 nsutf8 字符串。好的,我会的。
  • 数据没有 NSUTF8 字符串。你用钥匙干什么?在许多情况下,例如加密密钥是 8 位数据,通常不是字符串。你用密钥做什么?
  • 在 iOS 上使用 CommonCrypto 进行加密,AES128 需要一个 128 位(16 字节)的密钥,这就是 vector64Data 的含义。如果您在加密方面遇到问题,请询问有关该问题的问题并提供您尝试使用的代码。在此处提供指向新问题的链接,我会尽力为您提供帮助。
猜你喜欢
  • 2017-06-17
  • 2017-02-03
  • 1970-01-01
  • 2021-10-14
  • 2018-03-19
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多