当我使用AES128加密字符串时,如果加密字符串太长,那么它将包含\ r \ n。像这样
现在我必须使用空字符串来替换它。为什么encrypt-string包含\ r \ n以及更好的方法来避免或修复它。 感谢。
答案:它是由Base64编码过程引起的,每64个字符就会插入一个\ r \ n。
答案 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。