如果我用128位key,使用AES算法。加密后,结果的长度有什么规律。
我写了代码
case 1
src=123456789,加密后=26d2909f80c990426fd8836c31638718case 2
src=123456789123456789123456789,加密后=c0321124ee2fa54e5a153b7a94c9b1d33b5c33091ac6746eedcb869fc4b4795b
也就是说加密结果的长度是根据输入的长度决定的。这对吗?我不确定。

解决方案 »

  1.   

    哈,终于出来个玩aes的,我做毕业设计(实现aes算法在c#与java上的文件加密互通)的时候来问,没有人回复的
    我告诉你吧,java已经封装的aes算法只满足128key,加密后长度是在以16byte[]返回的,因为读取原文的时候是从头开始选取16个字节,然后转换为byte,再根据s盒子开始第一轮加密,所以,密文只会返回32字节,因为会把byte拆分,迭代等。
    也就是说,小于16字节的原文会得到32字节长度的密文
    大于16字节的,就是16*n长的原文会得到32*n长度的密文
    就好比楼主提供的数据,src=123456789123456789123456789长度27,所以得到32*2长度的密文
      

  2.   

    gao11811回答简单明了。无数的AES网页和教程均未提及。也许太简单?我不认为。别人用你的东西,却不明白输出的情况,设计人员或教程的编写人员应该以用户的体验来考虑。随便聊聊。
      

  3.   

    其实吧,AES真的很厉害的,他的出现说明一切,要理解它,然后自己写出他的加密类很难很难
    如果说看他的源码,其实很多书上都有,理论能明白已经不错了,那程序呢?基本中国的AES加密类都是抄来得源码
    当时,我苦苦追求java和c#的同步,研究源码,并且扩展到256key(api和c#只提供了128key强度),基本没有人能给我帮助,我不是密码学专业,所有的外面的老师都没有听过AES,培训单位的老师也不知道
    当快要交毕业设计的时候,我求助我的辅导老师,他居然和我说java直接调用他的AES加密类就可以了
    我倒,那还叫毕业设计吗?不研究源码怎么互通?他说,答辩老师不看得OMG
    更可笑的是,答辩的老师只有一个知道有java这个东西,其他都是硬件方面的老师,有个老师问我,你的C++怎么写成#了?我差点晕过去,他们居然不知道有c#
    所以,AES的原理资料,特别是java的很少很少, 所谓的资料都是抄来抄去的,但是很少人能说清楚具体的情况(专门学习AES的除外)
    我的毕业论文,个人认为现在是极其宝贵的AES原理分析和代码解析(AES+c#)
      

  4.   

     我只是看了一下java的加密使用,总结一下。注意,只是使用,不是实现算法有三种加密方法,各有各的特点
    1)hash算法,也叫散列
    是不可逆的
    MD5/SHA-1将任何数据生成16位的byte[]2)对称算法
    需要key,算法是可逆的,也就是说同一个key同时可以加密和解密
    根据算法,key的长度每个算法不一样
     --DES,比较久了,听说不安全了
     -- AES,比较新。java的实现,是每128bits计算一次。需要加密的字串越长,加密的结果就越长
    3)公钥密钥算法
    需要两个key,公钥和密钥。 公钥加密,密钥解密.
     --RSA,比较通用。 HTTPS/SSL就是用它
      

  5.   

    gogao11811能否把你的论文放出来大家共享一下
      

  6.   


    对称加密是指加解密的密钥相同;
    AES加密,如果输入是16*n字节,没有填充的情况下,输出和输入相同;有填充的情况下,输出是16*(n+1)。
    如果输入不是16字节整数倍,而是大于16*n小于16*(n+1),没有填充的情况下(只能是CFB和OFB模式),输出和输入长度相同;有填充情况下,输出长度是16*(n+1);
    gao11811的表述有误,毕业论文也许再自己检查一下