8私钥加密为空 ios_ios rsa加密和解密,只能私钥加密,公钥解密吗 - CSDN
精华内容
参与话题
  • 一步一步 搞定RSA(公钥、私钥

    万次阅读 多人点赞 2015-11-29 18:22:11
    首先我们要会生成RSA密钥文件,现在一步步的来给大家展示一下,如何生成我们所需的公钥和私钥文件: RSA密钥生成过程 生成私钥文件 $ openssl genrsa -out private.pem 1024openssl:是一个自由的软件组织,专注做...
    • 首先我们要会生成RSA密钥文件,现在一步步的来给大家展示一下,如何生成我们所需的公钥和私钥文件:
      RSA密钥生成过程

    • 生成私钥文件
      $ openssl genrsa -out private.pem 1024

      • openssl:是一个自由的软件组织,专注做加密和解密的框架。
      • genrsa:指定了生成了算法使用RSA
      • -out:后面的参数表示生成的key的输入文件
      • 1024:表示的是生成key的长度,单位字节(bits)
    • 创建证书请求
      $ openssl req -new -key private.pem -out rsacert.csr

      • 可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。(要收费的)
    • 生成证书并签名,有效期10年
      $ openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt

      • 509是一种非常通用的证书格式。
      • 将用上面生成的密钥privkey.pem和rsacert.csr证书请求文件生成一个数字证书rsacert.crt。这个就是公钥
    • 转换格式 将 PEM 格式文件 转换成 DER 格式
      $ openssl x509 -outform der -in rsacert.crt -out rsacert.der

      • 在 iOS开发中,公钥是不能使用base64编码的,上面的命令是将公钥的base64编码字符串转换成二进制数据
    • 导出 P12 文件

      • 在iOS使用私钥不能直接使用,需要导出一个p12文件。下面命令就是将私钥文件导出为p12文件。

    $ openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt


    执行完上面的这些,我们现在就得到了四个文件
    RSA


    • 那么接下来,我们用这两个文件来使用一下(小点点的两个文件即可)。
     - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        //创建加密对象
        CryptorTools *tool = [[CryptorTools alloc]init];
        //要加密的内容
        NSString *msg = @"i love you";
        //加载公钥
        NSString *pubPath = [[NSBundle mainBundle] pathForResource:@"rsacert.der" ofType:nil];
        [tool loadPublicKeyWithFilePath:pubPath];
        //使用公钥加密
        NSString *result = [tool RSAEncryptString:msg];
        NSLog(@"加密 = %@",result);
    
    
        //解密
        //加载私钥
        //密码是导出p12密码
        NSString *privatePath = [[NSBundle mainBundle] pathForResource:@"p.p12" ofType:nil];
        [tool loadPrivateKey:privatePath password:@"123456 "];
        //使用私钥解密
        NSString *result2 = [tool RSADecryptString:result];
        NSLog(@"解密 = %@",result2);
    }
    • 看一下结果:
      RSA加密结果

    搞定。

    展开全文
  • 苹果证书和公钥私钥加密

    千次阅读 2015-04-12 23:15:04
    今天看了点关于公私钥加密的内容,赶快记下省的忘记了。 这里有几个概念:公钥,私钥加密,认证,认证中心(CA),数字证书。 公钥和私钥是属于非对称性加密,公钥和私钥是完全不同的,但是相互对应的。一把私钥...

    今天看了点关于公私钥加密的内容,赶快记下省的忘记了。

    这里有几个概念:公钥,私钥,加密,认证,认证中心(CA),数字证书。

    公钥和私钥是属于非对称性加密,公钥和私钥是完全不同的,但是相互对应的。一把私钥只能对应一把公钥。顾名思义,公钥是对外开放的,所有人都可以获得,私钥是自己保管的。

    加密与认证

    基于公钥的加密

           加密的目的是保证密文只能由特定人读取,其他人都不能获知里面的内容。公钥的作用就是加密。举例说明:Alices发信息给Bob。她会用Bob给的公钥对明文进行加密。Bob得到密文后,用自己的私钥解密。这个过程保证即使其他人得到了密文也没法看。

    基于公开密钥的加密过程

    图1

    基于私钥的认证

           私钥的作用是鉴别用户的真伪。还是上面的例子,Alices给Bob发信。但是Bob的公钥很多人都有,如何知道收到的信是Alices发的呢?就要靠私钥认证。Alices给Bob发信的时候可以附带一段信息,然后通过自己的私钥把这段信息加密。Bob收到信后,首先用Alices的公钥就附带信息进行解密,如果正确就说明这封信确实是Alices发的,然后再用自己的私钥解密信的具体内容。


    基于公开密钥的认证过程

    图2

    认证中心(CA)与数字证书

           认证中心的作用是保证公钥的正确。比如:Alices想给Bob发一封绝密的信件,而此时,Alices和Bob都没有对方的公钥。这时,Bob给Alices的公钥,Alices如果知道是Bob给的而不是其他人冒充给的?怎么办?!这时就要CA出马了。Bob提交自己信息和公钥给CA。CA通过自己的私钥加密这些信息,生成一个数字证书。Bob把这个数字证书给Alices,Alices通过CA的公钥对数字证书解密,得到公钥就是Bob的公钥。

            个人感觉非对称加密一个很重要的一环就是CA的作用。首先,CA要保证它的公钥不能被替换,否则都别玩了。这个估计不难,确定个网址,只有从这下载的才是CA的公钥。或是其他更高级的措施。其次,CA要保证对个人的认证。比如Tom提交个人信息和公钥后CA就要保证不能冒充为Bob的。这个估计靠人或其他措施,总之能保证。这些都是CA的事,我们不管。

    图3

    苹果的签名

            重头戏来了,下面就说一下苹果的签名与上面的关系。搞了这么久的iOS开发,经常被开发中各种证书给搞晕,这真是一个大坑,但是不得不过。      

    一、数字签名(digital signature)

    对指定信息使用哈希算法,得到一个固定长度的信息摘要,然后再使用 私钥 (注意必须是私钥)对该摘要加密,就得到了数字签名。所谓的代码签名就是这个意思。

    二、数字证书(digital certificate)

    证书生成

    开发者在申请iOS开发证书时,需要通过keychain生成一个CSR文件(Certificate Signing Request),提交给苹果的 Apple Worldwide Developer Relations Certification Authority(WWDR)证书认证中心进行签名,最后从苹果官网下载并安装使用。这个过程中还会产生一个私钥,证书和私钥在keychain中得位置如图:

    iphone-developer-keychain.png

    图4

    证书组成

    经过WWDR数字签名后的数字证书长这个样子:

    20130603170838968.png

    其中包含两大部分:

    · 证书本身

    包含用户的公钥、用户个人信息、证书颁发机构信息、证书有效期等信息。

    · 证书签名

    WWDR将上述证书本身内容的使用哈希算法得到一个固定长度的信息摘要,然后使用自己的私钥对该信息摘要加密生成数字签名,整个过程如图所示:

    20130603170752859.png

    证书使用

    iOS系统原本就持有WWDR的公钥(这里就保证了CA公钥的正确性),系统首先会对证书内容通过指定的哈希算法计算得到一个信息摘要;然后使用WWDR的公钥对证书中包含的数字签名解密,从而得到经过WWDR的私钥加密过的信息摘要;最后对比两个信息摘要,如果内容相同就说明该证书可信。整个过程如图所示:

    20130603170924312.png

    在验证了证书是可信的以后,iOS系统就可以获取到证书中包含的开发者的公钥,并使用该公钥来判断代码签名的可用性了。

    证书存在的意义

    通过证书使用过程可以看出,证书本身只是一个中间媒介,iOS系统对证书并不关心,它其实只想要证书中包含的开发者的公钥!!

    但是开发者怎么才能证明公钥是自己的呢?iOS安全系统怎么才能相信这个公钥就是这个开发者的呢?

    不管是哪一个开发者对iOS的安全系统说,这个公钥就是我的,系统是都不相信的,即系统对开发者有着百分之百的不信任感。但是iOS安全系统对自家的WWDR是可信任的,苹果将WWDR的公钥内置在了iOS系统中。有了证书,iOS安全系统只需要通过WWDR的公钥就可以获取到任何一个开发者的可信任的公钥了,这就是证书存在的意义!!

    三、公钥(public key)

    公钥被包含在数字证书里,数字证书又被包含在描述文件(Provisioning File)中,描述文件在应用被安装的时候会被拷贝到iOS设备中。

    iOS安全系统通过证书就能够确定开发者身份,就能够通过从证书中获取到的公钥来验证开发者用该公钥对应的私钥签名后的代码、资源文件等有没有被更改破坏,最终确定应用能否合法的在iOS设备上合法运行。

    四、私钥(private key)

    每个证书(其实是公钥)都对应有一个私钥,

    私钥会被用来对代码、资源文件等签名。只有开发证书和描述文件是没办法正常调试的,因为没有私钥根本无法签名。

    五、provisioning profile的生成

    还记得刚开始为了生成这玩意也费了很大劲。首先通过钥匙串生成一个csr文件,把这个文件提交给苹果开发中心,生成一个cer文件。其实这个过程就是把自己的公钥给Apple,至于上面提到的如果保证公钥的确定性,就靠进入开发中心的账号和密码了,如果这玩意泄露了,那就谁也无能为力。

    下载安装cer文件后,就会在钥匙串中多出个选项,如图4所示。下面是自己的私钥,这个很重要。别问私钥存在哪,我也不知道,但是它能导出为p12文件。

           cer搞定后就是在开发者中心添加appID,设备等,不详述了。 最后到生成provisioning profile。首先你要选类型,就是用于开发还是用于发布,其次是appID。下面的选项很重要,是选择certificates,这个就是选择你要包含的公钥,它是用来加密用的,我一般会都选。如果是开发的话,下面就是选择设备了,然后命个名就完事了。设计到加密的就是certificates的选择。

          所以开发的时候私钥也就是P12文件和provisioning profile匹配是最重要的。私钥对代码进行加密,公钥解密。整个过程就是认证的过程,保证了,iOS设备安装的程序是经过苹果审核同意的。这也就是苹果费这么大劲的目的。

            在Xcode6中codesing和provisioning配置都是可选择的,选择一定的匹配,否则要不是真机调不了,要不就是上传不成功。

            简述一下整个过程:首先开发者上传csr文件,即把公钥给苹果。生成provisioning profile时选择对应的公钥。然后下载安装相应的provisioning文件。在程序打包时,会用私钥就代码进行加密,然后把provisioning文件包含到app文件中。当iOS设备安装应用时,首先用CA的公钥解密出开发者的公钥,然后再用开发者的公钥解密出代码,完成安装。

           看来苹果为了保证代码的来源,也是蛮拼的!

    展开全文
  • 一、证书加密有两种方式获取证书的私钥和公钥 ①iOS 原生API 读取证书的公钥和私钥 ②调用openssl k库函数进行加解密二、本文对于证书的加解密使用的是iOS原生API 具体的demo,网址:......

    一、证书加密有两种方式获取证书的私钥和公钥

            ①iOS 原生API 读取证书的公钥和私钥

            ②调用openssl k库函数进行加解密

    二、本文对于证书的加解密使用的是iOS原生API

            具体的demo,网址:https://download.csdn.net/download/weixin_37569048/10326929

    三、使用OpenSSL库

                以下这个链接,有详细的openssl使用方式

                    iOS 在Xcode中使用OpenSSL库

    四、注意事项

        配置xcode时两个配置地点:

            ①、


            ②、

        五加密后的效果图

                            

                对1234进行公钥加密和私钥解密的结果,以及获取证书的序列号(这个可以导入导入证书到电脑中,然后查看详细信息可以看到证书序列号信息)

                        

            好了,差不多就结束了,第一次写博客,写的乱七八糟的,希望大家不要喷我,会慢慢变好的,谢谢!

    代码请看demo,就不粘贴了!



    展开全文
  • 最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android、iOS),在处理iOS的数据加密的时候遇到了一些问题。...

    加密的Demo

    最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android、iOS),在处理iOS的数据加密的时候遇到了一些问题。起初采取的方案是DES加密,老大说DES加密是对称的,网络抓包加上反编译可能会被破解,故采取RSA方式加密。RSA加密时需要公钥和私钥,客户端保存公钥加密数据,服务器保存私钥解密数据。(iOS端公钥加密私钥解密、java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不能私钥加密公钥解密,只能用于验签)。

    问题

    问题1:iOS端公钥加密的数据用Java端私钥解密。

    iOS无论使用系统自带的sdk函数,用mac产生的或者使用java的jdk产生的公钥和私钥,进行加密解密自己都可以使用。不过ios加密,java解密,或者反过来就不能用了。要么是无法创建报告个-9809或-50的错误,要么解出来是乱码。ios系统函数种只有用公钥加密,私钥解密的方式。而公钥加密每次结果都不同。

    MAC上生成公钥、私钥的方法,及使用
    • 1.打开终端,切换到自己想输出的文件夹下
    • 2.输入指令:openssl(openssl是生成各种秘钥的工具,mac已经嵌入
    • 3.输入指令:genrsa -out rsa_private_key.pem 1024 (生成私钥,java端使用的)
    • 4.输入指令:rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout (生成公钥)
    • 5.输入指令:pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt(私钥转格式,在ios端使用私钥解密时用这个私钥)
      注意:在MAC上生成三个.pem格式的文件,一个公钥,两个私钥,都可以在终端通过指令vim xxx.pem 打开,里面是字符串,第三步生成的私钥是java端用来解密数据的,第五步转换格式的私钥iOS端可以用来调试公钥、私钥解密(因为私钥不留在客户端)
      详细步骤

    问题2:服务器返回数据也要加密,老大打算用java私钥加密,ios用公钥解密(由于iOS做不到用私钥加密公钥解密,只能私钥加密公钥验签),所以这种方案也有问题。

    通过看一些大牛的介绍,了解了iOS常用的加密方式
    • 1 通过简单的URLENCODE + BASE64编码防止数据明文传输
    • 2 对普通请求、返回数据,生成MD5校验(MD5中加入动态密钥),进行数据完整性(简单防篡改,安全性较低,优点:快速)校验
    • 3 对于重要数据,使用RSA进行数字签名,起到防篡改作
    • 4 对于比较敏感的数据,如用户信息(登陆、注册等),客户端发送使用RSA加密,服务器返回使用DES(AES)加密
      原因:客户端发送之所以使用RSA加密,是因为RSA解密需要知道服务器私钥,而服务器私钥一般盗取难度较大;如果使用DES的话,可以通过破解客户端获取密钥,安全性较低。而服务器返回之所以使用DES,是因为不管使用DES还是RSA,密钥(或私钥)都存储在客户端,都存在被破解的风险,因此,需要采用动态密钥,而RSA的密钥生成比较复杂,不太适合动态密钥,并且RSA速度相对较慢,所以选用DES)
      所以此次加密,我们选择了第四种加密方式

    加密方式

    ios端进行DES加密、解密时非常方便

    1、引入头文件 #import "DES3Util.h"
    2、加密时调用类方法  +(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key;
    3、解密时调用类方法  +(NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key;

    ios端进行RSA加密、解密时非常方便

    1、引入头文件 #import "RSAUtil.h"
    2、公钥加密时调用类方法:
    + (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;
    + (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey;
    3、私钥解密时调用类方法 
    + (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;
    + (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey;

    ios端进行MD5加密、解密时非常方便

    1、引入头文件 #import "MD5Util"
    2、加密时调用方法:- (NSString *)md5:(NSString *)str;

    ios端进行AES加密、解密时非常方便

    1、引入头文件 #import "AES.h"
    2、加密时调用方法
    + (NSString *)encrypt:(NSString *)message password:(NSString *)password;
    2、解密时调用的方法
    + (NSString *)decrypt:(NSString *)base64EncodedString password:(NSString *)password;

    有关RSA、MD5、AES加密的原理介绍

    效果图


    Encryption.gif


    展开全文
  • iOS 理解证书与描述文件

    千次阅读 2016-05-12 10:26:41
    简单理解Certificate,Provision profile之间的关系.以及与Xcode Code Signing的关联.
  • 加密和签名的区别?

    万次阅读 2016-07-26 13:16:40
    公钥加密私钥解密是秘送,私钥加密公钥解密是签名 作者:CM Binder 就拿A给B发送经过签名加密信息来说: 1、A对信息签名的作用是确认这个信息是A发出的,不是别人发出的; 2、加密是对内容进行机密性...
  • 简单的一行代码实现加密解密

    千次阅读 2016-07-08 14:10:13
    iOS端公钥加密私钥解密、java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不能私钥加密公钥解密,只能用于验签。 问题1:iOS端公钥加密的数据用Java端私钥解密。 iOS无论使用系统自带的sdk函数,用...
  • 查资料的时候发现很多人有疑惑,公钥和私钥到底哪个是用来加密,哪个是用来解密的,是否可以公钥加密私钥解密,同时也可以私钥加密公钥解密呢?针对这一问题,说下自己的理解。 首先要明确两个问题:(1)既可以...
  • 在 RSA 加密中遇到的一些坑 - 安卓/iOS 所需私钥不同。
  • 证书、签名、私钥、描述文件的一句话描述 (1)证书分两种:开发者证书、发布者证书。前者开发时使用,后者发布使用 (2)模拟器调试无需代码签名;真机调试需开发者证书代码签名;发布时需发布证书签名 (3)代码...
  • Java和PHP服务端,Android和iOS为客户端。...Java和Android所用的公钥、私钥是同样的格式,私钥需要PKCS8格式,默认生成的私钥是PKCS1格式的 php私钥需要PKCS1格式的 iOS私钥需要.p12的文件格式,公钥需要.der格式的
  • app端与服务端加密

    万次阅读 2018-01-24 14:30:59
    1.关于RSA加密机制:公钥用于对数据进行加密私钥对数据进行解密,两者不可逆。公钥和私钥是同时生成的,一一对应。比如:A拥有公钥,B拥有公钥和私钥。A将数据通过公钥进行加密后,发送密文给
  • 支付宝之私钥签名公钥验签

    万次阅读 2016-03-09 11:02:25
    RSA公钥加密算法简介 非对称加密算法。只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。 目前被...
  • 本文投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e81cc0b 最近做了一个移动项目,是有服务器和客户端类型的项目,...
  • JAVA(Android),PHP,IOS三平台RSA加解密互通算法RSA算法RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥...加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的...
  • RSA+DES+AES

    千次阅读 2017-03-28 14:54:58
    之前做的SSL生成秘钥对,并用RSA和AES相结合的加密算法,并用另一种算法保存私钥。现在只是简单的将加密解密转过来
  • php rsa加密解密实例

    万次阅读 多人点赞 2014-07-25 09:43:34
    1、加密解密的第一步是生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目
  • 目录 一、非对称加密  1、什么是非对称加密?  2、非对称加密的工作过程  3、非对称加密的优点 ... 4、非对称加密的不足 ...二、RSA加密算法 ...非对称加密是指,需要用一对儿密钥,即公钥和私钥,来完成加...
  • ios app安装的四种方式

    千次阅读 2018-07-03 16:14:56
    第一种,用户直接通过App Store下载安装苹果官方通过非对称加密生成一对公私钥,在iOS设备内置了一个公钥,在苹果后台保存了对应的私钥,在开发者把app上传到App Store时,苹果用私钥对这个app进行签名,当iOS设备...
1 2 3 4 5 ... 20
收藏数 5,486
精华内容 2,194
关键字:

8私钥加密为空 ios