公司在开发第三方支付平台的时候,安全模块用的是RSA来解密。结果效果很低。运行100解密线程就用了22秒!这个要求肯定是不符合我们要求的!所以我们到处在网上的找代码。结果还是没办法!还是很慢!...
公司在开发第三方支付平台的时候,安全模块用的是RSA来解密。结果效果很低。运行100解密线程就用了22秒!这个要求肯定是不符合我们要求的!所以我们到处在网上的找代码。结果还是没办法!还是很慢!最后我们同事找到一个问题,修改了下果然解密速度大幅提高!我特意写这篇文章!已做记录.
/** * 解密 * @param key 解密的密钥 * @param raw 已经加密的数据 * @return 解密后的明文 * @throws Exception */ public byte[] decrypt(Key key, byte[] raw) throws Exception { try { Cipher cipher = Cipher.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider()); cipher.init(cipher.DECRYPT_MODE, key); int blockSize = cipher.getBlockSize(); ByteArrayOutputStream bout = new ByteArrayOutputStream(64); int j = 0; while (raw.length - j * blockSize > 0) { bout.write(cipher.doFinal(raw, j * blockSize, blockSize)); j++; } return bout.toByteArray(); } catch (Exception e) { throw new Exception(e.getMessage()); } }
上面的文章就是以前的代码!在网上到处都可以找到!但是如果你多线程运行的话!结果会很慢很慢!
下面就是修改过后的代码:
Cipher cipher = Cipher.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider());
这句替换成
public static synchronized Cipher getCipher() throws NoSuchAlgorithmException, NoSuchPaddingException { if (cipher == null) { cipher = Cipher.getInstance("RSA", new BouncyCastleProvider()); } return cipher;
}
效果会有比较大的提升!
我测试了运行100解密线程就用了1秒.基本符合公司的要求!具体原因不知道。
本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!
本站主要用于日常笔记的记录和生活日志。本站不保证所有内容信息可靠!(大多数文章属于搬运!)如有版权问题,请联系我立即删除:“abcdsjx@126.com”。
QQ: 1164453243
邮箱: abcdsjx@126.com