当前位置: 首页 > 知识库问答 >
问题:

在Android中将字符串转换为RSA私钥

汤弘文
2023-03-14

在Android中,我使用下面的代码将String转换为RSA私钥

https://www.devglan.com/online-tools/rsa-encryption-decryption

但是,当我使用这个网站时,我的代码不起作用。

https://8gwifi.org/RSAFunctionality?keysize=1024

我在Android studio中的代码是:

public static PrivateKey stringToPrivateKey(String privateKeyString)
    {
        try {
            if (privateKeyString.contains("-----BEGIN PRIVATE KEY-----") || privateKeyString.contains("-----END PRIVATE KEY-----"))
                privateKeyString = privateKeyString.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "");


            if (privateKeyString.contains("-----BEGIN RSA PRIVATE KEY-----") || privateKeyString.contains("-----END RSA PRIVATE KEY-----"))
                privateKeyString = privateKeyString.replace("-----BEGIN RSA PRIVATE KEY-----", "").replace("-----END RSA PRIVATE KEY-----", "");

            privateKeyString.trim();
            privateKeyString = privateKeyString.replaceAll("\\s+","");
            privateKeyString = privateKeyString.replaceAll("\\r+","");
            privateKeyString = privateKeyString.replaceAll("^ | $|\\n ", "");


            byte[] keyBytes = Base64.decode(privateKeyString, Base64.DEFAULT);
            PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance(RSA);
            return keyFactory.generatePrivate( spec);

        } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
            e.printStackTrace();
        }
    }

与第二个链接错误是在这一行

钥匙工厂。发电机驱动(spec);

共有1个答案

佴博实
2023-03-14

这段代码解决了我的问题:

void dear(String publicKeyB64)  throws NoSuchAlgorithmException, InvalidKeySpecException{

        if (publicKeyB64.contains("-----BEGIN PUBLIC KEY-----") || publicKeyB64.contains("-----END PUBLIC KEY-----"))
            publicKeyB64 = publicKeyB64.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "");
        if (publicKeyB64.contains("-----BEGIN RSA PUBLIC KEY-----") || publicKeyB64.contains("-----END RSA PUBLIC KEY-----"))
            publicKeyB64 = publicKeyB64.replace("-----BEGIN RSA PUBLIC KEY-----", "").replace("-----END RSA PUBLIC KEY-----", "");

        // ok, you may need to use the Base64 decoder of bouncy or Android instead
        try{
            byte[] decoded = Base64.decode(publicKeyB64, Base64.DEFAULT);
            org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(decoded);
            BigInteger modulus = pkcs1PublicKey.getModulus();
            BigInteger publicExponent = pkcs1PublicKey.getPublicExponent();
            RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);
            KeyFactory kf = KeyFactory.getInstance("RSA");
            PublicKey generatedPublic = kf.generatePublic(keySpec);
            uk =generatedPublic;
           //uk is public variable in class and means public key
        }
        catch (Exception e){
            Log.i("your log","errro in dear function");
        }

    }

这是我的图书馆:

编译“org.bounchycastle:bcprov-jdk15on:1.58”

编译"org.bouncycastle: bcpkix-jdk15on: 1.58"

 类似资料:
  • 问题内容: 我有一个字符串。我希望它成为“ Uri”,这样我就可以与 如何将Songchoice转换为Uri? 问题答案: 这是文档http://developer.android.com/reference/android/net/Uri.html#parse%28java.lang.String%29

  • 我想将字符串转换为int。 例如: 如果是,则应将其转换为与相同的 为什么我需要这个。因为我要将unicode int转换为表情符号,所以我使用的是这段代码。 你能让我知道我该怎么做吗?

  • 让我先解释一下我的问题。我从CA购买了一个证书,并使用以下格式生成csr和私钥: 有趣的是,在aws文档页面上,他们显示的示例私钥以“------开始RSA私钥-------”开头 有没有办法使用OpenSSL将我的私钥转换为RSA私钥?

  • 我有以下字符串格式的RSA私钥。 我正在尝试使用下面的代码片段将其转换为PrivateKey类型- 我正在犯错误- 它给我一个错误的生成私人方法。 尝试在这里使用Java的答案:将DKIM私钥从RSA转换为用于JavaMail的DER

  • 我有一个OpenSSH格式的私钥文件: 但我需要RSA格式: 在终端我会这样做: 但我需要用Java来做。 我尝试使用org.bouncycastle.openssl.PEMWriter,但我无法解决如何将我的输入键(作为输入字符串)转换为可传递给PEMWriter的Private ateKey对象。

  • 我正在尝试转换一个表示存储在SQLite中的日期的字符串。 日期存储到sqlite中,如下所示: 根据Java文档,方法: 返回此日期的字符串表示形式。格式设置相当于使用具有格式字符串“eee MMM dd hh:mm:ss zzz yyyy”的SimpleDateFormat,看起来类似于“tue Jun 22 13:07:00 PDT 1999”。则使用当前默认时区和区域设置。如果需要控制时区