IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS ECDH协商秘钥和Java后台通信 -> 正文阅读

[移动开发]iOS ECDH协商秘钥和Java后台通信

GitHub找的各种轮子,就是跟后台无法协商秘钥。就很nice。后台说:安卓都调通了,iOS怎么不行。

那就找出不行的原因。

核心:Java默认使用的jdk的加密对象生成的公钥 是有一个固定开头信息,iOS 生成的没有需要自己手动拼开头信息。

开头信息:标准 ASN.1 OID 的标头
着重参考:https://developer.apple.com/forums/thread/8030?page=2 官方问答

只需要头部固定拼接26 byte信息(官方问答那篇文章也有提到)

其他:
1.iOS用的ECDH的轮子https://github.com/ricmoo/GMEllipticCurveCrypto/。
楼主由于项目需要不适用官方common库(另外官方的还需要存keychain再从内存读,)。
2.官方的小哥写的demo(swift)https://github.com/hfossli/EskimoKeys/tree/master。

还有问题,多看几遍https://developer.apple.com/forums/thread/8030?page=2 官方问答 。

iOS用轮子GMEllipticCurveCrypto里的publicKeyBase64方法被改成下面的样子 生成的数据和后台就可以通信。

-(NSString*)publicKeyBase64
{
//    return [self.publicKey base64EncodedStringWithOptions:0];
//    NSString*str = base64StringFromData(self.publicKey);
//    return str;
    
    NSMutableData *pubData = [NSMutableData dataWithData:self.publicKey];
    Byte byte[] = {
                   0x30,0x59,0x30,0x13,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,0x01,0x06,0x08,0x2a,
                   0x86,0x48,0xce,0x3d,0x03,0x01,0x07,0x03,0x42,0x00
    };
    NSMutableData *headerData = [NSMutableData dataWithBytes:byte length:sizeof(byte)];
    [headerData appendData:pubData];
    NSString*str = base64StringFromData(headerData);
    return str;
}

解决问题看的一些文章:
链接: 密钥交换(密钥协商)算法及其原理
链接: 使用ECDH的一些感慨
链接: OpenSSL ECC 算法
链接: 国密SM2算法的GitHub 这个轮子设置kDefaultEllipticCurveType = NID_sm2是国密的。里面的OpenSSL有比特币用的加密类型"NID_secp256k1",没看到有 “NID_secp256r1” 。为什么没有?难道secp256r1 是默认的 ”NID_undef“那个? 还是别的原因。有知道的人还请帮忙解答一下。

链接: iOS 中的椭圆曲线加密
链接:官方问答2 椭圆曲线密码术
链接:官方问答3(官方竟然被diss了) ECDH 共享密钥不匹配.
链接: ECC算法推荐参数(256k1和256r1) 因为iOS的轮子里有声明secp256r1(对应curve25519)用的”点“信息。我在这里怀疑跟大小端序有关,验证确认 没关系。

链接: 非对称加密以及使用secp256k1进行数字签名(ECDSA) 这里去看Java后台初始化设置的参数 secp256r1。我们后台只设置 ”EC“ & “256” 两个参数我让他们改成博客里的样式。验证确认 EC&256 对等 secp256r1

链接: ECC椭圆曲线加密算法:介绍 如果你更有兴趣看看这个文章,当初没学好的数学知识 总需要还回来。以后我孩子就选数学专业了。

链接: 一个简单的轮子sever&client

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:12:28  更:2021-09-27 14:13:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:44:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码