
我对加密的了解非常基础,对于我的任何无知都是道歉.
在Android应用程序中,我目前正在尝试使用SpongyCastle library和标准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 herebyte[] 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);} 总结 以上是内存溢出为你收集整理的java – 使用SpongyCastle的RSA全部内容,希望文章能够帮你解决java – 使用SpongyCastle的RSA所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)