如果我用128位key,使用AES算法。加密后,结果的长度有什么规律。
我写了代码
case 1
src=123456789,加密后=26d2909f80c990426fd8836c31638718case 2
src=123456789123456789123456789,加密后=c0321124ee2fa54e5a153b7a94c9b1d33b5c33091ac6746eedcb869fc4b4795b
也就是说加密结果的长度是根据输入的长度决定的。这对吗?我不确定。
我写了代码
case 1
src=123456789,加密后=26d2909f80c990426fd8836c31638718case 2
src=123456789123456789123456789,加密后=c0321124ee2fa54e5a153b7a94c9b1d33b5c33091ac6746eedcb869fc4b4795b
也就是说加密结果的长度是根据输入的长度决定的。这对吗?我不确定。
解决方案 »
- JTree 动态加载ACCESS数据库中的内容生成树的问题?谢谢!
- private static final对象也被回收了?
- 怎么利用控制台输入?送分
- 如果import了很多无用的包会不会对性能造成影响?
- help,怎么在一个ByteArrayOutputStream中加一个file,
- 在Think in java 中那个“上传”到底是怎么回事???
- 问个菜问题:使用JBUILDER开发的程序运行的效率高,还是用其他如delphi,vb等开发工具效率高?
- 关于JAVA生成EXE文件的问题
- 请进!有分!
- 学java主要应用于那些方面?
- 怎么从txt中读取文件并且复制给一个字符串
- java 对象赋值怎么不改变原来的对象的引用
我告诉你吧,java已经封装的aes算法只满足128key,加密后长度是在以16byte[]返回的,因为读取原文的时候是从头开始选取16个字节,然后转换为byte,再根据s盒子开始第一轮加密,所以,密文只会返回32字节,因为会把byte拆分,迭代等。
也就是说,小于16字节的原文会得到32字节长度的密文
大于16字节的,就是16*n长的原文会得到32*n长度的密文
就好比楼主提供的数据,src=123456789123456789123456789长度27,所以得到32*2长度的密文
如果说看他的源码,其实很多书上都有,理论能明白已经不错了,那程序呢?基本中国的AES加密类都是抄来得源码
当时,我苦苦追求java和c#的同步,研究源码,并且扩展到256key(api和c#只提供了128key强度),基本没有人能给我帮助,我不是密码学专业,所有的外面的老师都没有听过AES,培训单位的老师也不知道
当快要交毕业设计的时候,我求助我的辅导老师,他居然和我说java直接调用他的AES加密类就可以了
我倒,那还叫毕业设计吗?不研究源码怎么互通?他说,答辩老师不看得OMG
更可笑的是,答辩的老师只有一个知道有java这个东西,其他都是硬件方面的老师,有个老师问我,你的C++怎么写成#了?我差点晕过去,他们居然不知道有c#
所以,AES的原理资料,特别是java的很少很少, 所谓的资料都是抄来抄去的,但是很少人能说清楚具体的情况(专门学习AES的除外)
我的毕业论文,个人认为现在是极其宝贵的AES原理分析和代码解析(AES+c#)
1)hash算法,也叫散列
是不可逆的
MD5/SHA-1将任何数据生成16位的byte[]2)对称算法
需要key,算法是可逆的,也就是说同一个key同时可以加密和解密
根据算法,key的长度每个算法不一样
--DES,比较久了,听说不安全了
-- AES,比较新。java的实现,是每128bits计算一次。需要加密的字串越长,加密的结果就越长
3)公钥密钥算法
需要两个key,公钥和密钥。 公钥加密,密钥解密.
--RSA,比较通用。 HTTPS/SSL就是用它
对称加密是指加解密的密钥相同;
AES加密,如果输入是16*n字节,没有填充的情况下,输出和输入相同;有填充的情况下,输出是16*(n+1)。
如果输入不是16字节整数倍,而是大于16*n小于16*(n+1),没有填充的情况下(只能是CFB和OFB模式),输出和输入长度相同;有填充情况下,输出长度是16*(n+1);
gao11811的表述有误,毕业论文也许再自己检查一下