跨平台rsa签名与验签

这篇博客探讨了如何在Java和Python之间实现跨平台的RSA签名验证过程,适用于不同语言之间的互操作,例如PHP。
摘要由CSDN通过智能技术生成


本文主要讨论 java 和python之前的跨平台rsa签名、验签,当然,其他语言也可以参考一下,比如php等等


在开发中我们经常遇到这一类问题,java平台和python平台进行通信时,比如我们服务器是python后台而对方的服务器是java后台,而如果要使用对方提供的接口就必须要rsa签名与验签,而这两个平台的rsa密钥的格式并不相同,这个时候,应该怎么办?

第一种情况,java生成密钥,签名, 使用python验签

java生成密钥的代码如下:
 /**
     * 将字节数组转换为16进制字符串的形式.
     */
    public static final String bytesToHexStr(byte[] bcd) {
        StringBuffer s = new StringBuffer(bcd.length * 2);
        for (int i = 0; i < bcd.length; i++) {
            s.append(HEX_LOOKUP_STRING[(bcd[i] >>> 4) & 0x0f]);
            s.append(HEX_LOOKUP_STRING[bcd[i] & 0x0f]);
        }
        return s.toString();
    }
/**
     * 本方法用于产生1024位RSA公私钥对。
     * @return 私钥、公钥
     */
    private static String[] genRSAKeyPair() throws Exception {
        KeyPairGenerator rsaKeyGen = null;
        KeyPair rsaKeyPair = null;
        System.out.println("Generating a pair of RSA key ... ");
        rsaKeyGen = KeyPairGenerator.getInstance("RSA");
        SecureRandom random = new SecureRandom();
        random.setSeed(("" + System.currentTimeMillis() * Math.random() * Math.random()).getBytes());
        rsaKeyGen.initialize(1024, random);
        rsaKeyPair = rsaKeyGen.genKeyPair();
        PublicKey rsaPublic = rsaKeyPair.getPublic();
        PrivateKey rsaPrivate = rsaKeyPair.getPrivate();
        String privateAndPublic[] = new String[2];
        privateAndPublic[0] = bytesToHexStr(rsaPrivate.getEncoded());
        privateAndPublic[1] = bytesToHexStr(rsaPublic.getEncoded());
        System.out.println("私钥:" + privateAndPublic[0]);
        System.out.println("公钥:" + privateAndPublic[1]);
        System.out.println("1024-bit RSA key GENERATED.");
        return privateAndPublic;
    }

这样生成的密钥是这种形式(以公钥为例):
30819f30...... 203010001
这是16进制的密钥

这种密钥是无法在python平台直接使用的,在python平台,大家见惯的密钥应该是“ MIGfMA0GCSqGSIb3D pQb1mjeGLy6gw+AfOKZ1dpNbMUyZml+p3stTS...... ”这种形式的。
 那么python平台应该怎么用公钥验签呢?
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值