使用 SpongyCastle 进行 RSA

2023-11-30

我对加密的了解非常基础,因此对于我的无知表示歉意。

在 Android 应用程序中,我目前正在尝试使用以下命令来模拟此命令的执行SpongyCastle 图书馆和标准java.security libs:

echo 'test' | openssl rsautl -encrypt -pubin -inkey test.pub | base64 > encrypted_file

需要注意的是,命令中对文件的读写是not将要实施并且我有我的公钥(即test.pub) 作为 Base64 编码字符串base64key在我的代码中。

我已尝试以下操作,但确信它不起作用:

static {
       Security.insertProviderAt(new BouncyCastleProvider(), 1);
      }

//...more code here

byte[] pka = Base64.decode(base64key);

X509EncodedKeySpec x = new X509EncodedKeySpec(pka);
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(x);

byte[] testToByte = "test".getBytes("UTF8"); 

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); 
keyGen.initialize(2048); 

Cipher cipher = Cipher.getInstance("RSA"); 
cipher.init(Cipher.ENCRYPT_MODE, publicKey); 

byte[] cipherText = cipher.doFinal(testToByte); 

String encrypted = Base64.encode((new String(cipherText, "UTF8").toString().getBytes()))

我知道这很遥远,但我不知道该转向哪里。任何帮助,将不胜感激。


最终通过以下方法解决了这个问题:

private void stripHeaders(){

    public_key = public_key.replace("-----BEGIN PUBLIC KEY-----", "");
    public_key = public_key.replace("-----END PUBLIC KEY-----", "");

}

public byte[] encryptWithPublicKey(String encrypt) throws Exception {
    byte[] message = encrypt.getBytes("UTF-8");
    stripHeaders(); 
    PublicKey apiPublicKey= getRSAPublicKeyFromString(); 
    Cipher rsaCipher = Cipher.getInstance("RSA/None/PKCS1Padding", "SC");
    rsaCipher.init(Cipher.ENCRYPT_MODE, apiPublicKey); 
    return rsaCipher.doFinal(message);
}

private PublicKey getRSAPublicKeyFromString() throws Exception{
    KeyFactory keyFactory = KeyFactory.getInstance("RSA", "SC"); 
    byte[] publicKeyBytes = Base64.decode(public_key.getBytes("UTF-8"), Base64.DEFAULT); 
    X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(publicKeyBytes); 
    return keyFactory.generatePublic(x509KeySpec);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SpongyCastle 进行 RSA 的相关文章

随机推荐