当我使用AES128加密字符串时,如果加密字符串太长,那么它将包含\ r \ n。像这样AES加密字符串出现 r n
现在我必须用空字符串来代替它。为什么加密字符串包含\ r \ n以及更好的方法来避免或修复它。 谢谢。
回答:这是由Base64编码过程引起的,每64个字符会插入一个\ r \ n。
当我使用AES128加密字符串时,如果加密字符串太长,那么它将包含\ r \ n。像这样AES加密字符串出现 r n
现在我必须用空字符串来代替它。为什么加密字符串包含\ r \ n以及更好的方法来避免或修复它。 谢谢。
回答:这是由Base64编码过程引起的,每64个字符会插入一个\ r \ n。
这是一个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。
是的,它是由Base64编码引起的。谢谢。 – zedzhao
请提供您使用的代码。 – sschale
没有人知道你是如何创建你的加密字符串,除了你和一些心理学家。 –