Розшифровка Base64 в iOS 7+


184

У мене є закодований текст ( NSString), використовуючи NSDataAPI Class Class, який додано в iOS7.

використовуючи це

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding;  

ось мій код

NSString *base64EncodedString = [[myText dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];

NSLog(@"%@", base64EncodedString);

Я шукаю його розшифрувати


7
m_EncodeText: зупиніться, будь ласка,
Карл Вейзей

1
де ти знайшов base64EncodedStringWithOptions:?
user2159978

@ user2159978 це там у програмі apple docs developer.apple.com/library/ios/documentation/cocoa/reference/…
Sandeep Khade,

Здається, це буває, коли я використовую цільовий додаток консолі програми mac os. Або стару версію sdk / mac os target
user2159978

Відповіді:


438

Швидкий 3+

let plainString = "foo"

Кодування

let plainData = plainString.data(using: .utf8)
let base64String = plainData?.base64EncodedString()
print(base64String!) // Zm9v

Розшифровка

if let decodedData = Data(base64Encoded: base64String!),
   let decodedString = String(data: decodedData, encoding: .utf8) {
  print(decodedString) // foo
}

Швидкий <3

let plainString = "foo"

Кодування

let plainData = plainString.dataUsingEncoding(NSUTF8StringEncoding)
let base64String = plainData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
print(base64String!) // Zm9v

Розшифровка

let decodedData = NSData(base64EncodedString: base64String!, options: NSDataBase64DecodingOptions(rawValue: 0))
let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding)
print(decodedString) // foo

Ціль-С

NSString *plainString = @"foo";

Кодування

NSData *plainData = [plainString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [plainData base64EncodedStringWithOptions:0];
NSLog(@"%@", base64String); // Zm9v

Розшифровка

NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
NSLog(@"%@", decodedString); // foo 


1
Я не думаю, що цей код чистий. Я отримую попередження: "несумісні типи вказівників ініціалізують NNSTring з виразом NSData"
drlobo

9
@drlobo у вас повинен бути набраний base64EncodedDataWithOptions: замість base64EncodedStringWithOptions:
Bach

4
Дякую за це Щось я щойно знайшов: константа kNilOptionsдорівнює 0, що, напевно, читабельніше, ніж використання 0 для параметрів.
Адам Уейт

2
@AdamWaite kNilOptionsвизначено, у MacTypes.hякому є застарілий заголовок OSX, тому мені не подобається його використовувати, оскільки я думаю, що заголовок потрібно повністю видалити з SDK iOS. У будь-якому випадку, у вас є сенс сказати, що це легко читається, тому сміливо використовуйте це.
Габріеле Петронелла

2
якщо хтось отримує NSDataBase64DecodingOptions.IgnoreUnknownCharacters
нульову

81

Якщо ви хочете написати резервний код, розшифровка з base64 присутня в iOS з самого початку застереженням NSURL:

NSURL *URL = [NSURL URLWithString:
      [NSString stringWithFormat:@"data:application/octet-stream;base64,%@",
           base64String]];

return [NSData dataWithContentsOfURL:URL];

12
Я цілком вражений цією відповіддю. Протягом багатьох років я використовував смішну кількість коду, щоб розшифрувати рядок, і все разом було дворядкове рішення.
AlBeebe

Це круто! Хаккі, але дивовижно :)
Micha Mazaheri

Я ніколи не думав, що це так просто! Дякую!!
Kumar C
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.