非主流操作用python调用java


测试开发 / / 300 字 / 50 阅

最近对接南京公安大数据的接口,对方使用的是国密2(SM2)进行的数据加解密。调了一天没进展,直到他们发给了我一个java版的demo,简直看吐我了。

国密的旧标准使用的由C1C2C3组成的密文,而新标准是C1C3C2,现在网上各种国密开源库都是用的新标准,直接导致我使用公钥加密的数据南京公安大数据那边没法解开。

另外一个坑是公私钥分两种:一种未压缩秘钥(04开头)、一种压缩秘钥(我们常用的),这里也浪费我不少时间,把demo翻来覆去的看才发先需要给公钥进行填充然后加密。

这就完了?还没有,我给他们发的加密数据他们倒是能解开了,但是返回给我的数据,我拿私钥解不开啊!我真是哔了狗,看看非主流写法:

    byte[] c1Bytes = Util.hexToByte(data.substring(0,130));
    int c2Len = encryptedData.length - 97;
    byte[] c2 = Util.hexToByte(data.substring(130,130 + 2 * c2Len));
    byte[] c3 = Util.hexToByte(data.substring(130 + 2 * c2Len,194 + 2 * c2Len));

    // byte[] c1Bytes = Util.hexToByte(data.substring(0,130));
    // int c2Len = encryptedData.length - 97;
    // byte[] c3 = Util.hexToByte(data.substring(130,130 + 64));
    // byte[] c2 = Util.hexToByte(data.substring(194,194 + 2 * c2Len));

我也懒得再用python去实现这个过程了,直接把demo打成jar包命令行调用吧,缺点是每次调用都要去启动jvm速度有点慢,后面看能不能直接读到内存里然后调用

EOF
发表评论 (暂无评论)
OωO
开启隐私评论,您的评论仅作者和评论双方可见