草庐IT

ios - 在 iOS 上解码 base64 数据

coder 2024-01-17 原文

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

示例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

最佳答案

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

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

输出:

base64: RwSBFR7iQ5vQYLqZE60hJEyOaU4VVGcqtvnB2A1zQEylNdN9tTZIOfwGMwDbMZlnnvT7lm80L1MkvDNHqivdRAV4Ymtizw3Fd3GWBZ+xFVIAk0H3lQWzAr43G7TRCYfcr5Ijuj0qGIEF1FLpY6tlYNMI0C3J6UXHqnd3vu4XuwIHi1gVciOxuP+iqgjvjM3Oqy8sU0YITC3ywxPASh14azvcPu9F1/KYS1J1JzN3XsTzscHfkdry0hbz5H0l+6UmUz9Sb9HTGxxx9mwFB821I8DfZc2RGx8WmFuaNzgLFhS6CdwFG9yALPk4wBUqIxEAy4w/oLPosQqZ7Z9LJnQ4SA==

data: <47048115 1ee2439b d060ba99 13ad2124 4c8e694e 1554672a b6f9c1d8 0d73404c a535d37d b5364839 fc063300 db319967 9ef4fb96 6f342f53 24bc3347 aa2bdd44 0578626b 62cf0dc5 77719605 9fb11552 009341f7 9505b302 be371bb4 d10987dc af9223ba 3d2a1881 05d452e9 63ab6560 d308d02d c9e945c7 aa7777be ee17bb02 078b5815 7223b1b8 ffa2aa08 ef8ccdce ab2f2c53 46084c2d f2c313c0 4a1d786b 3bdc3eef 45d7f298 4b527527 33775ec4 f3b1c1df 91daf2d2 16f3e47d 25fba526 533f526f d1d31b1c 71f66c05 07cdb523 c0df65cd 911b1f16 985b9a37 380b1614 ba09dc05 1bdc802c f938c015 2a231100 cb8c3fa0 b3e8b10a 99ed9f4b 26743848>

关于ios - 在 iOS 上解码 base64 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44912522/

有关ios - 在 iOS 上解码 base64 数据的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  5. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  6. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  7. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  8. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  10. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

随机推荐