2016-03-07 1325 views
-4

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

现在我必须用空字符串来代替它。为什么加密字符串包含\ r \ n以及更好的方法来避免或修复它。 谢谢。

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

+2

请提供您使用的代码。 – sschale

+0

没有人知道你是如何创建你的加密字符串,除了你和一些心理学家。 –

回答

2

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

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

特别是对于目标C的创建从NSData一个Base64字符串是:

- (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options 

options包括:

NSDataBase64Encoding64CharacterLineLength
设置最大行长度为64个字符,在这之后行尾被插入。

其中插入每个64个字符的“\ r \ n”(回车,换行)字符。

如果这不是你想要的传递0作为选项值。

为了解码的Base64使用Objective-C方法:

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

使用选项:NSDataBase64DecodingIgnoreUnknownCharacters

苹果代码:

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

把它作为Base64字符串给出的东西的长度是4的倍数,字符使用“a-zA-Z0-9 + /”和尾随的“=”字符。

历史性注释:这些日子在OSX和iOS换行符是一个“\ n”(0x0a)换行符。当我们使用teletypes作为终端“\ r”(0x0d)时,回车将托架或打印头移回,但没有将纸张移动到下一行。 “\ n”换行符将纸张向上移动一行,但确实将托架或打印头移回。他们是两个不同的机械操作。稍后有些系统使用“\ r \ n”,“\ n \ r”,“\ r”或“\ n”。 Unix选择“\ n”,从而选择OSX和iOS。

+0

是的,它是由Base64编码引起的。谢谢。 – zedzhao