當我使用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
沒有人知道你是如何創建你的加密字符串,除了你和一些心理學家。 –