SM4、AES、DES加解密算法性能比较
测试代码
public void encryDecry() throws Exception{
SM4StringEncryptor sm4 = new SM4StringEncryptor();
String path = "D:\\Users\\xlj\\Downloads\\sylog.txt";
File file = new File(path);
InputStreamReader reader = new InputStreamReader(new FileInputStream(path));
BufferedReader br = new BufferedReader(reader);
StringBuilder fileContent = new StringBuilder();
String line = "";
line = br.readLine();
while (line != null) {
line = br.readLine();
fileContent.append(line);
}
System.out.println("文件原始大小:" + fileContent.length() /1024/1024 + "Mb");
StringBuilder fileContent = new StringBuilder("xlj12442");
long startTime = System.currentTimeMillis();
String encryContent= sm4.encrypt(fileContent.toString());
System.out.println("sm4加密后:" + encryContent);
System.out.println("sm4加密后文件大小:" + encryContent.length() /1024/1024 + "Mb");
long endTime = System.currentTimeMillis();
System.out.println("sm4加密耗时:" + (endTime - startTime) + "ms");
String decryContent = sm4.decrypt(encryContent);
System.out.println("sm4解密后:" + decryContent);
System.out.println("sm4解密后文件大小:" + decryContent.length() /1024/1024 + "Mb");
long endTime1 = System.currentTimeMillis();
System.out.println("sm4解密耗时:" + (endTime1 - endTime) + "ms");
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
long aesStartTime = System.currentTimeMillis();
encryContent = aes.encryptHex(decryContent);
long esaEndTimeEncry = System.currentTimeMillis();
System.out.println("aes加密后:" + encryContent);
System.out.println("aes加密后文件大小:" + encryContent.length() /1024/1024 + "Mb");
System.out.println("aes加密耗时:" + (esaEndTimeEncry - aesStartTime) + "ms");
long aesEncryStartTime = System.currentTimeMillis();
decryContent = aes.decryptStr(encryContent, CharsetUtil.CHARSET_UTF_8);
long aesEncryEndTime = System.currentTimeMillis();
System.out.println("aes解密后:" + decryContent);
System.out.println("aes解密后文件大小:" + decryContent.length() /1024/1024 + "Mb");
System.out.println("aes解密耗时:" + (aesEncryEndTime - aesEncryStartTime) + "ms");
key = SecureUtil.generateKey(SymmetricAlgorithm.DESede.getValue()).getEncoded();
SymmetricCrypto des = new SymmetricCrypto(SymmetricAlgorithm.DESede, key);
long desStartTime = System.currentTimeMillis();
encryContent = des.encryptHex(decryContent);
long desEndTimeEncry = System.currentTimeMillis();
System.out.println("des ede加密后:" + encryContent);
System.out.println("des ede加密后文件大小:" + encryContent.length() /1024/1024 + "Mb");
System.out.println("des ede加密耗时:" + (desEndTimeEncry - desStartTime) + "ms");
long desEncryStartTime = System.currentTimeMillis();
decryContent = des.decryptStr(encryContent, CharsetUtil.CHARSET_UTF_8);
long desEncryEndTime = System.currentTimeMillis();
System.out.println("des ede解密后:" + decryContent);
System.out.println("des ede解密后文件大小:" + decryContent.length() /1024/1024 + "Mb");
System.out.println("des ede解密耗时:" + (desEncryEndTime - desEncryStartTime) + "ms");*/
}
性能比较结果
加密算法 |
文件大小 |
加密耗时(ms) |
解密耗时(ms) |
SM4 |
5M |
1596 |
841 |
AES |
5M |
201 |
447 |
DES |
5M |
317 |
669 |
SM4 |
620KB |
689 |
172 |
AES |
620KB |
109 |
186 |
DES |
620KB |
53 |
132 |
SM4 |
36KB |
487 |
34 |
AES |
36KB |
20 |
57 |
DES |
36KB |
9 |
14 |
SM4 |
6Bytes |
505 |
0 |
AES |
6Bytes |
13 |
24 |
DES |
6Bytes |
1 |
0 |