当前位置: 首页 > 面试题库 >

RSA使用SpongyCastle

姜德泽
2023-03-14
问题内容

我的加密知识非常基础,因此对我的任何不了解深表歉意。

目前,在一个Android应用程序中,我正在尝试使用SpongyCastle库和标准java.security库来模仿此命令的执行:

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

应该注意的是,将 不会
实现对命令中文件的读写操作,并且在我的代码中将我的公共密钥(即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);
}


 类似资料:
  • 我尝试使用“RSA/ECB/PKCS7Padding”进行加密。JCE不支持它。所以我下载了Bouncy Castle,但Bouncy Castle似乎也不支持这种转换。以下代码: 投掷 我做得对吗? 蒂亚。

  • 我正在尝试实现RSA算法。我想加密一个图像。问题是当解密完成时,文件无法读取。我不知道问题到底出在哪里。这是RSA的实现: 这是主要方法: 这是加密方法: 这是解密方法: 阅读和写作的方法如下所述:http://www.java2s.com/Code/Java/File-Input-Output/Readfiletobytearrayandsavebytearraytofile.htm

  • 我一直在搜索,但我似乎找不到一个简单的方法解密使用RSA。 我生成了一个公钥和私钥,它们存储在两个单独的文件中,并且是XML格式的。使用FromXmlString将公钥关联到RSACryptoServiceProvider对象,然后加密一个字符串,这一点没有问题。当我试图解密一个加密的字符串时,我的困惑就来了。我不确定如何将私钥数据与RSACryptoServiceProvider关联,以便使用D

  • 如果使用RSA-OAEP是不可能的,你能给出同样的方法吗? 谢谢

  • 据我所知,如我所愿,我应该能够使用RSA来确保真实性或隐私。在我的例子中,我想确保真实性,所以我用私钥加密数据,并允许任何人用公钥解密。数据并不是真正的秘密,但我需要保证它是由公钥(和私钥)的所有者创建的。 当我尝试使用PyCrypto解密时,我从PyCrypto得到没有私钥错误。代码是这样的: 我使用公钥文件的路径(OpenSSH格式)调用它加密数据不是由我生成的,它不是用Python而是用PH

  • 我使用Delphi XE和Lockbox3.5,我想加密一个字符串,该字符串具有支付网关提供的公钥,需要操作,公钥类似于:------开始公钥------这里的职员------结束公钥------我无法使RSA编解码器读取该公钥,我的代码如下: 编解码器cdcRA链接到CryptoLibrary,密码为(RSA公钥加密系统*),链接模式为空,但此代码失败,并出现内存不足错误。谢谢你的提示。。 演示