电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

解決對接JAVA SM2加密遇到的坑

瀏覽:2日期:2022-08-23 11:40:08

遇到有接口需要使用國密的SM2算法,對方使用的是JAVA,我們使用的是go,原以為都是標準算法不會有什么大問題,結(jié)果巨坑無法..

對方使用的加密模塊,SM2.java和SM2KeyPairs.java,不知道最初是誰開發(fā)的,網(wǎng)上貌似很多都是這個版本的實現(xiàn),但是和go的交互總是有問題,用這個java模塊加密的,go里面怎么也無法正確解密。仔細核對之后發(fā)現(xiàn),這個java模塊有幾個地方并不符合GB/T32891的標準。

SM2加密的流程

SM2使用的橢圓曲線基點記為G,私鑰為整數(shù)d, 公鑰為P = dG.,這里K、G為橢圓曲線上的點,d為正整數(shù)

選擇隨機整數(shù)k,計算 C1 = kG, C4 = kP

以點C4的X/Y兩坐標為參數(shù),計算一組字節(jié)流T,與明文進行異或運算,結(jié)果為C2

已C1和明文組合,用SM3算法計算哈希值C3

將C1、C2、C3組合為加密后的密文

這里只要得到C4,便能進行解密,而C4 = kP = kdP = dkP = d(kC) = dC1。而C1是密文的一部分,所以有了私鑰d便可以進行解密。

這里的P、G、C1、C4是橢圓曲線上的點,點的乘法只具有幾何意義上,并非2X3=6的算術(shù)運算。

SM2 java模塊與標準差異

1. 加密密文的組合

加密后的密文,標準為C1 || C3 || C2,C3位SM3哈系值,而這個庫中結(jié)果為 C1 || C2 || C3。

2. Java BigInteger的最高位為1時編碼錯誤

Java中,BigInteger的最高位為1時,toByteArray()得到的字節(jié)數(shù)組會多一位,在前面多了一個為0的字節(jié),應該是要表示為正數(shù)。導致運算結(jié)果和其他語言的不一致。

3. 計算T時的差異

計算T時,需要用點C4的X坐標和Y坐標組合進行,這個庫里直接調(diào)用bouncycastle庫里,ECPoint類的getEncoded()的方法,得到的結(jié)果是在字節(jié)流里加了一個字節(jié)(0x4),實際是不需要的,導致計算的字節(jié)流T有差異

4. 取點的X/Y坐標時沒有正則化

java的bouncycastle庫里,在橢圓曲線的計算中,使用了X/Y/Z三個坐標,而其他的實現(xiàn)可能是沒有Z坐標的,所以調(diào)用點的坐標的時候,應該調(diào)用normalize()方法正則化后使用,這時Z坐標是1。

而在這個庫中,并沒有進行正則化的操作,導致加密結(jié)果無法與其他程序進行交互,除非對方也使用的bouncycastle庫,可實現(xiàn)方式與其類似。

補充知識:SM2數(shù)字簽名算法java實現(xiàn)

給出我的SM2數(shù)字簽名算法代碼Java實現(xiàn),所屬文件SM2Signer.java

@Overridepublic BigInteger[] generateSignature(byte[] message) { ECDomainParameters ec = key.getParameters(); BigInteger n = ec.getN(); //階n ECPoint G = ec.getG(); //基點G BigInteger r, s; // 獲取私鑰d BigInteger d = ((ECPrivateKeyParameters)key).getD(); ECMultiplier basePointMultiplier = createBasePointMultiplier(); // 初始化隨機數(shù)生成器 if (kCalculator.isDeterministic()) { kCalculator.init(n, d, message); } else { kCalculator.init(n, random); } do { // 計算s BigInteger k; BigInteger e; BigInteger tmp; BigInteger tmp2; do { // 計算r,參照GM/T 0003.2-2012 6.1 k = kCalculator.nextK(); ECPoint p = basePointMultiplier.multiply(G, k).normalize(); e = org.bouncycastle.util.BigIntegers.fromUnsignedByteArray(message); // r = (e + x) mod n r = p.getAffineXCoord().toBigInteger().add(e).mod(n); } while (r.equals(ZERO) || r.add(k).equals(n)); // tmp = (1+d).inverse tmp = d.add(ONE).modInverse(n); // tmp2 = k - r*d tmp2 = k.subtract(r.multiply(d)); s = tmp.multiply(tmp2).mod(n); } while (s.equals(ZERO)); return new BigInteger[] {r,s};}

以上這篇解決對接JAVA SM2加密遇到的坑就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 昊宇水工|河北昊宇水工机械工程有限公司| 碳纤维布-植筋胶-灌缝胶-固特嘉加固材料公司| 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 传爱自考网_传爱自学考试网| 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 家庭教育吧-在线家庭教育平台,专注青少年家庭教育 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 鄂泉泵业官网|(杭州、上海、全国畅销)大流量防汛排涝泵-LW立式排污泵 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 硬齿面减速机[型号全],ZQ减速机-淄博久增机械 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 营养师网,营养师考试时间,报名入口—网站首页 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 | 篮球架_乒乓球台_足球门_校园_竞技体育器材_厂家_价格-沧州浩然体育器材有限公司 | 水压力传感器_数字压力传感器|佛山一众传感仪器有限公司|首页 | 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 六自由度平台_六自由度运动平台_三自由度摇摆台—南京全控科技 | 氢氧化钾厂家直销批发-济南金昊化工有限公司 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | PAS糖原染色-CBA流式多因子-明胶酶谱MMP-上海研谨生物科技有限公司 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 |