AES加密字符串出现\ r \ n

时间:2016-03-07 02:03:32

标签: ios objective-c aes

当我使用AES128加密字符串时,如果加密字符串太长,那么它将包含\ r \ n。像这样enter image description here

现在我必须使用空字符串来替换它。为什么encrypt-string包含\ r \ n以及更好的方法来避免或修复它。 感谢。

答案:它是由Base64编码过程引起的,每64个字符就会插入一个\ r \ n。

1 个答案:

答案 0 :(得分:2)

这是一个Base64编码的字符串。

实际加密输出是一个8位字节的数组,而不是字符。代码是Base64编码加密数据,可选择每64个字符插入换行符,这有时可以更好地打印输出。解码后,使用NSDataBase64DecodingIgnoreUnknownCharacters选项删除换行符。

特别是对于Objective-C,从NSData创建Base64字符串是:

- (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options

options包括:

NSDataBase64Encoding64CharacterLineLength
将最大行长度设置为64个字符,然后插入行结尾。

哪些插入" \ r \ n" (回车,换行)每个64个字符的字符。

如果那不是您想要传递0作为选项值。

要解码Base64,请使用Objective-C方法:

- (instancetype)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions)options

使用选项:NSDataBase64DecodingIgnoreUnknownCharacters

Apple代码:

  

此方法的默认实现将拒绝非字母字符,包括换行符。要支持不同的编码并忽略非字母字符,请指定NSDataBase64DecodingIgnoreUnknownCharacters的选项值。

将它作为Base64字符串赋予它的长度是4的倍数,使用的字符是" a-zA-Z0-9 + /"和尾随" ="字符。

历史记录:OSX和iOS换行的这些日子是单一的" \ n" (0x0a)换行符。当我们使用电传手机作为终端" \ r" (0x0d)回车移动托架或打印头,但没有将纸张移动到下一行。 " \ n"换行将纸张向上移动一行,但确实将托架或打印头移回原位。它们是两种不同的机械操作。后来一些系统使用" \ r \ n"," \ n \ r"," \ r"或" \ n"。 Unix选择" \ n" OSX和iOS。