解码iOS上的base64数据

时间:2017-07-04 18:54:10

标签: ios encoding base64

我有一个base64字符串,我可以在macOS上解码,每行将字符串分成16个字节(字符),然后使用OpenSSL进行解码:

示例data.enc

RwSBFR7iQ5vQYLqZ
E60hJEyOaU4VVGcq
tvnB2A1zQEylNdN9
tTZIOfwGMwDbMZln
nvT7lm80L1MkvDNH
qivdRAV4Ymtizw3F
d3GWBZ+xFVIAk0H3
lQWzAr43G7TRCYfc
r5Ijuj0qGIEF1FLp
Y6tlYNMI0C3J6UXH
qnd3vu4XuwIHi1gV
ciOxuP+iqgjvjM3O
qy8sU0YITC3ywxPA
Sh14azvcPu9F1/KY
S1J1JzN3XsTzscHf
kdry0hbz5H0l+6Um
Uz9Sb9HTGxxx9mwF
B821I8DfZc2RGx8W
mFuaNzgLFhS6CdwF
G9yALPk4wBUqIxEA
y4w/oLPosQqZ7Z9L
JnQ4SA==

解码命令:

openssl enc -d -base64 -in data.enc -out data.bin

这是RAW base64编码的字符串:

R3LSQUyakgQKXoxCqw/v/o2LwPPthWSOgoyCKV/p60WE7tIVLTIf0mGiSGhXwK91cXYygsCoXyTEdMY4bquMhhV09R2DXVVD79IXBp+7mGSdTcYh4FUvZCMUmWCqjje2PiZUXIzfDgwrJcxKplNrX6T/oc70quz/X4rZv1Qu6BMDBzF/otsC0Q1qx3QzUobxsRaUaCltb1CSdExTZ3zWR8anuz5eaBct3ymM8XNA8zYv6CB44/P+yS6CqGOza/a5R5x04A06Un0hu+d+hsSxW2F9zdeODz3t7cPVZYiW9nyC9XzIXH01Oi25uHuC0otxLlfXU4adMHB4Lj6YrA3Uxg==

data.bin中的数据是PKI加密的,我可以在iOS上解密它就好了。如果我cat data.bin我看到加密的数据(仅显示前几个字符):

Gr?AL?? ^?B????????d????)_??E???-2?a?HhW??uqv2???

然而,在iOS上,如果我尝试:

NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"enc"];
NSString *text = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSData *data = [[NSData alloc] initWithBase64EncodedString:text options:0];

然后数据总是nil

1 个答案:

答案 0 :(得分:2)

注意:Base64解码输出一个字符串,它是二进制数据。您将返回nil,因为它不是UTF-8字符串,并且任意数据通常无效UTF-8。

$message = <<<EOD
    Hi,
    Please pick up {$name}from {pickup} and drop to {$destination}
    EOD;

输出:

NSString *base64 = @"RwSBFR7iQ5vQYLqZE60hJEyOaU4VVGcqtvnB2A1zQEylNdN9tTZIOfwGMwDbMZlnnvT7lm80L1MkvDNHqivdRAV4Ymtizw3Fd3GWBZ+xFVIAk0H3lQWzAr43G7TRCYfcr5Ijuj0qGIEF1FLpY6tlYNMI0C3J6UXHqnd3vu4XuwIHi1gVciOxuP+iqgjvjM3Oqy8sU0YITC3ywxPASh14azvcPu9F1/KYS1J1JzN3XsTzscHfkdry0hbz5H0l+6UmUz9Sb9HTGxxx9mwFB821I8DfZc2RGx8WmFuaNzgLFhS6CdwFG9yALPk4wBUqIxEAy4w/oLPosQqZ7Z9LJnQ4SA==";
NSLog(@"base64: %@", base64);
NSData *data = [[NSData alloc] initWithBase64EncodedString:base64 options:nil];
NSLog(@"data: %@", data);