SM2中密钥交换的问题

2 篇文章 0 订阅

SM2中密钥交换的问题

1.字节数组转十六进制字符串(Hex)
public static String HexString(byte[] b) {
        StringBuilder builder = new StringBuilder();
        if (b == null || b.length <= 0){
            return null;
        }
        for (int i = 0; i < b.length; i++) {
            String hex = Integer.toHexString(b[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            System.out.print(hex.toUpperCase());
            builder.append(hex);
        }
        return builder.toString();
    }
2.判断公钥的长度
BC库生成的公钥前面包含有04标志位(解密的时候需要用到),生成的私钥前面偶尔会多加两个00(也是标志位?),记得去掉00。
注:BC库使用的公钥=64个字节+1个字节(04标志位),BC库使用的私钥=32个字节。
通过打印公钥的字节数组也可以发现
转字节数组输出:[4, 48, 112, -33, 39, -123, 26, -81, -104, 100, -2, -36, 79, 33, 63, -41, -39, -123, 65, -116, -40, -76, -15, 113, 105, -118, 117, -66, 69, -105, 95, -115, 33, 107, 7, 36, 31, -18, 38, 67, -13, -123, -15, 22, -37, 37, -83, -98, 32, 66, -94, 28, 1, -115, -4, 126, 58, -42, 71, -109, -46, 91, -39, 13, 27]
转十六进制后
Hex字符串输出:043070DF27851AAF9864FEDC4F213FD7D985418CD8B4F171698A75BE45975F8D216B07241FEE2643F385F116DB25AD9E2042A21C018DFC7E3AD64793D25BD90D1B
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SM2交换是一种安全的椭圆曲线算法,用于双方在不安全的通信渠道上交换,从而确保的安全性。以下是一个使用C语言实现SM2交换的简要步骤: 1. 导入必要的库函数:在C语言,需要导入椭圆曲线库和交换相关的函数库。 2. 生成SM2曲线参数:包括椭圆曲线的系数、基点和模数。 3. 生成随机数:通过C语言的随机数生成函数生成一个随机数。 4. 生成本地的对:使用SM2算法生成本地的公和私。 5. 将本地公发送给对方:通过不安全的通信渠道将本地公发送给对方。 6. 接收对方公:从不安全的通信渠道接收对方发送的公。 7. 利用对方公计算共享:使用SM2算法定义的交换算法根据对方公和本地私计算出共享。 8. 将共享发送给对方:通过不安全的通信渠道将共享发送给对方。 9. 完成交换:双方完成交换,可以使用共享进行加通信。 需要注意的是,以上步骤是SM2交换的基本流程,具体实现需要根据具体的椭圆曲线库函数和交换函数进行调用和逻辑编写。同时还需要注意安全性和错误处理,例如对随机数的生成和共享的发送进行保护,防止信息泄露和非法篡改。 ### 回答2: SM2是国自主设计的一种非对称加算法,用于实现数字签名、交换、公私加解等功能。其交换协议是基于椭圆曲线离散对数问题的困难性,在保证安全性的前提下,具有高效性、可扩展性和灵活性等特点。 在C语言实现SM2交换,需要以下基本步骤: 1. 定义和初始化相关参数。首先,需要定义椭圆曲线参数,包括曲线方程、基点坐标等;然后,生成临时随机数作为私,并根据基点坐标计算公。 2. 生成临时随机数。使用伪随机数生成器生成一个随机数作为临时私。 3. 计算本地公。根据临时私,使用SM2算法的点乘算法,计算得到本地公。 4. 导出本地公和临时私。将本地公和临时私导出,发送给对方。 5. 接收对方公和临时私。接收到对方发送的公和临时私。 6. 计算会话。利用SM2算法的点乘算法,结合对方公和本地临时私,计算得到会话。 以上就是用C语言实现SM2交换的基本步骤。在实际应用,还需要处理异常情况、添加输入输出参数的验证和处理等。此外,为了保障安全性,还需要对加算法进行安全性评估和测试,确保算法的安全性和稳定性。最后,交换后的会话可以用于加通信数据,实现安全的通信保护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值