Java的AES算法性能疑惑

诺晨 发布于 2016/08/23 12:02
阅读 1K+
收藏 1

我在使用Java的AES算法时,发现以下两种的使用方式,加密的效率不一样,求大神解答!

方法一:

@Test
public void testAES2() throws Exception {
    String data = "123456";
    String key = "1234567890987654"; // 长度为16的密钥
		
    long s = System.currentTimeMillis();
		
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    cipher.doFinal(data.getBytes());
		
    long e = System.currentTimeMillis();
		
    System.out.print("time: " + (e - s) + " ms");
}

在这种使用方式中,我自定义一个16位的密钥,然后用AES加密,运行时间需要130毫秒左右。程序打印: time: 137 ms

方法二:

@Test
public void testAES3() throws Exception {
    String data = "123456";
    String key = "1234567890987654"; // 长度为16的密钥
		
    // 加了这两行代码后,效率提高很多。这是为什么?
    KeyGenerator keyGenForAES = KeyGenerator.getInstance("AES");
    keyGenForAES.init(128);
		
    long s = System.currentTimeMillis();
		
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    cipher.doFinal(data.getBytes());
		
    long e = System.currentTimeMillis();
		
    System.out.print("time: " + (e - s) + " ms");
}



方法二中,使用方式和方法一是一样的,只是加了两行代码,效率提高了很多。程序打印: time: 7 ms

这是为什么?求大神解答!!!!

加载中
0
h
houj

这是因为加密库初始化是需要时间的,

你如果把  long s = System.currentTimeMillis();  放到

 KeyGenerator keyGenForAES = KeyGenerator.getInstance("AES");

    keyGenForAES.init(128);

这两行代码之前,   耗时就会跟第一种方法一样约300ms了;

另外, 只是第一次计算会比较耗时,  后面再做就很快了.

诺晨
诺晨
回复 @houj : 感谢回复!!
h
houj
回复 @诺晨 : 是的,用的同一个;
诺晨
诺晨
每次加密都是用同一个加密库吗?
返回顶部
顶部