java aes加密与网上在线加密不同。谁能告诉我为啥?求个正确的例子,谢谢了!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java aes加密与网上在线加密不同。谁能告诉我为啥?求个正确的例子,谢谢了!相关的知识,希望对你有一定的参考价值。
我的代码如下:内容:test 密码:12345678
测试结果:73C58BAFE578C59366D8C995CD0B9D6D
在线结果:fdc2a7ef5a761218fd4c10294e3b516c
public static byte[] encrypt(String content, String password)
try
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes("utf-8")));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(byteContent);
return result;
catch (NoSuchAlgorithmException e)
e.printStackTrace();
catch (NoSuchPaddingException e)
e.printStackTrace();
catch (InvalidKeyException e)
e.printStackTrace();
catch (UnsupportedEncodingException e)
e.printStackTrace();
catch (IllegalBlockSizeException e)
e.printStackTrace();
catch (BadPaddingException e)
e.printStackTrace();
return null;
就是这个东西有很多标准的,你得看下线上用的是什么标准
AES/CBC/NoPadding (128)
AES/CBC/PKCS5Padding (128)
AES/ECB/NoPadding (128)
AES/ECB/PKCS5Padding (128)
DES/CBC/NoPadding (56)
DES/CBC/PKCS5Padding (56)
DES/ECB/NoPadding (56)
DES/ECB/PKCS5Padding (56)
DESede/CBC/NoPadding (168)
DESede/CBC/PKCS5Padding (168)
DESede/ECB/NoPadding (168)
DESede/ECB/PKCS5Padding (168)
RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)追问
你能给个精确一点的回答吗?这里用的是AES,也就是前四条。NoPadding的话加密内容不是16的整数直接异常,其它组合我都试过了。调不出。
追答细看了一下你的代码,我不太明白这段的含义
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes("utf-8")));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecureRandom指的是一个随机数,参数是种子,而不是key的内容
修改了下代码就会得出线上的内容,一般密码都会用MD5生成个摘要,才用来作Key的值(MD5刚好是16个字节)
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(byteContent);
return result; 参考技术A 这个都是统一的啊
向 VC++ 应用程序添加 AES 加密
【中文标题】向 VC++ 应用程序添加 AES 加密【英文标题】:Adding AES encryption to VC++ application 【发布时间】:2010-10-13 00:01:04 【问题描述】:我在 VC++ 中创建了一个 GUI 应用程序,现在我想对数据进行 AES128 加密,我正在写它。
谁能告诉我如何在 VC++ 中做到这一点。
【问题讨论】:
我强烈建议您进行研究并选择现成的加密解决方案,如果此数据非常敏感,因为正确加密很难。 【参考方案1】:Microsoft 提供了 CryptoAPI,它内置于 Windows。
文档的起点在这里:
http://msdn.microsoft.com/en-us/library/aa380255(v=VS.85).aspx一般用法概述:
http://msdn.microsoft.com/en-us/library/ms867086.aspx用 C 编写的示例程序:
http://msdn.microsoft.com/en-us/library/aa382016(v=VS.85).aspx这里是支持的算法列表,包括 AES128:
http://msdn.microsoft.com/en-us/library/bb931357(VS.85).aspx【讨论】:
【参考方案2】:我推荐使用 http://www.openssl.org/ 有一个使用 vc++ 的指南@http://www.devside.net/guides/windows/openssl
--编辑
您应该使用 openssl 网站上的最新版本,而不是该指南中的旧版本,指南中的所有其他内容都适用。
【讨论】:
以上是关于java aes加密与网上在线加密不同。谁能告诉我为啥?求个正确的例子,谢谢了!的主要内容,如果未能解决你的问题,请参考以下文章