我如何阅读rsa公钥形式的字符串(由java生成,我想用Python读取)

问题描述 投票:0回答:1

生成公钥的代码是

    public static final String CHARSET = "UTF-8";
    public static final String RSA_ALGORITHM = "RSA";


    public static Map<String, String> createKeys(int keySize){
        KeyPairGenerator kpg;
        try{
            kpg = KeyPairGenerator.getInstance(RSA_ALGORITHM);
        }catch(NoSuchAlgorithmException e){
            throw new IllegalArgumentException("No such algorithm-->[" + RSA_ALGORITHM + "]");
        }

        kpg.initialize(keySize);

        KeyPair keyPair = kpg.generateKeyPair();

        Key publicKey = keyPair.getPublic();
        String publicKeyStr = Base64.encodeBase64URLSafeString(publicKey.getEncoded());

        Key privateKey = keyPair.getPrivate();
        String privateKeyStr = Base64.encodeBase64URLSafeString(privateKey.getEncoded());
        Map<String, String> keyPairMap = new HashMap<String, String>();
        keyPairMap.put("publicKey", publicKeyStr);
        keyPairMap.put("privateKey", privateKeyStr);

        return keyPairMap;
    }


    public static RSAPublicKey getPublicKey(String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException {
        KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);
        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKey));
        RSAPublicKey key = (RSAPublicKey) keyFactory.generatePublic(x509KeySpec);
        return key;
    }

然后将密钥发送给我,我想用python importKey()读取它。但是我总是收到错误消息“不支持RSA密钥格式”。

关键是 “MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGrLFBqubzi45M_yxs5Ps4XW3DIOeAo5x7Ca9EYmWAig3Rb3Efm2PCgipwNube2Ae5eUI5dYlQW32FSF81rw7vNdwfODDzITyWRPLEuVbBbkF5zD6kTxycqlVbH-uTyb95181jpY_XY6tmEOCZCq3mZhil9VA4ZvAoSBcJ8muXaQIDAQAB”

在使用Google搜索之后,我尝试向其添加标题“ ----- BEGIN RSA PUBLIC KEY -----”,没什么不同。

java python-3.x rsa public-key-encryption
1个回答
0
投票
  1. 您正在使用'URLsafe'base64编码器,尽管不是标准的Java编码器。 “ URLsafe”使用不同的字符(对于代码值62和63),没有填充,也没有换行符。 PEM格式(在存在URLsafe编码之前就已经设计了很长时间,实际上在URL存在之前已经过了一年!)使用传统的base64字符(现在主要与MIME相关联),填充和换行符(每64个字符)。尽管并非所有软件checks

© www.soinside.com 2019 - 2024. All rights reserved.