转自http://blog.sina.com.cn/s/blog_60cf051301015orf.html

在网上找了一大堆资料,总有把AES加密有点弄懂了。这里推荐一个人写的博客。再次非常感谢这位大侠。http://hi.baidu.com/mallor/item/89dad214d1f1fe0dd1d66d33

写的详单详细。

我再啰嗦一下,我对AES的心得。

其实AES就是对16byte(128bit)数据进行加密的过程。说白了就是把128位通过一系列的变化变成另一个128数据。

这里主要用到2个关键的东西。密钥(key)这个是绝对不能省的。key要先扩张,然后进行10次的行列变化,与数据进行抑或操作。最终才能得到加密后的数据。

此位还有一个东西是非常让我困惑的,就是初始向量(IV)。这个地方自己当时也纳闷了很久,不知道怎么样。其实说真的,还真可以不用他。用她只是可以把加密变得更难破解。

那我就来具体说一下怎么用。

呵呵 废话有点多了。

u8 data[16]={ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};

u8 IV[16]={ 0x30, 0x31, 0x32, 0x33,
  0x34, 0x35, 0x36, 0x37,
  0x38, 0x39, 0x61, 0x62,
  0xd63, 0x64, 0x65, 0x66};

其实只要把

for(i=0;i<16;i++)
 {
  data[i]=data[i]^IV[i];
 }

然后再把data作为新的数据加密就OK了。

当然你也可以不用他。

那么如果数据不是16的倍数改怎么办呢。这里我们就用到的数据扩张

AES支持支持几种填充:NoPadding,PKCS5Padding,ISO10126Padding,PaddingMode.Zeros;PaddingMode.PKCS7;

这里要说明一下PKCS5Padding和PKCS7Padding是一样的。

详细大家可以参考http://www.cnblogs.com/midea0978/articles/1437257.html

我也再说一下PKCS7 就是数据少几个就填充几个。

比如数据{1,2,3,4,5,6,7,8,9,10}

少了6个

那么就填充6个6(注意是0x06,而不是字符6,字符6实际上是0x36)

{1,2,3,4,5,6,7,8,9,10,6,6,6,6,6,6}

注意一定要是16个数据(1个数据是8位,这样就是128位)这样才能进行AES加密。

切记。

PaddingMode.Zeros

这个填充方式,个人比较喜欢。就是在后面补充0.

无论缺多少就补多少个0。

再提醒一下就是如果刚满16个,那就要在补充称16个字节。一定要比原先的多。(每种补充都要满足这样。这里非常容易被忽略).

也就是说如果{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}

PaddingMode.Zeros模式

就要补充称{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

PKCS7Padding模式就要{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16}.这样再代入加密算法才是最正直的AES。

祝大家好运

http://www.oschina.net/code/snippet_242957_9931

这是C#写的。大家可以参考下。

C++的程序 http://hi.baidu.com/mallor/item/89dad214d1f1fe0dd1d66d33

这2个地方都非常好。

总之遇到困难,觉得不能退缩。要一步一步往前走,相信前途一定会是光明的。

我就是这样从一点也不知道然后在把C,和C#的加密解密方法给统一对应起来。C#都是集成的,引用非常简单。C里面就必须彻底搞清楚,才能用C加密的东西在C#下可以正常解密!!!

AES-128 加密算法相关推荐

  1. php aes 128位加密,php实现AES 128位加密的相关操作技巧分享

    php实现AES 128位加密的相关操作技巧是什么?这篇文章主要介绍了PHP实现的AES 128位加密算法,结合实例形式分析了AES 128位加密的相关概念.原理及php实现AES 128位加密的相关 ...

  2. android怎样生成固定的aes密钥,关于android:如何更改AES 128的密钥数量

    本问题已经有最佳答案,请猛点这里访问. 我找到了一个android加密的源..它使用的是aes 128位加密..但是密钥的数量固定为16个字符..有人能告诉我如何根据我们的意愿更改数字密钥..我不想限 ...

  3. AES 128位CBC加密解密(不使用固定IV)

    安全检查时要求账号和密码加密后才能存到数据库中,要求加密算法如下: 1)分组密码算法:AES(密钥长度在128位及以上)(GCM或CBC模式) 2)流密码算法:AES(密钥长度在128位及以上)(OF ...

  4. java aes php_php和java的aes默认加密算法有点区别及解决方法。

    1.php和java的aes默认加密算法有点区别,php能解密java加密的密文,但java不能解密php加密的密文.原因在于: 1.Java中AES加密与解密默认使用AES/ECB/PKCS5Pad ...

  5. python aes 128 gcm 防沉迷身份认证

    python aes 128 gcm 最近防沉迷的api用到aes 128 gcm python 3版本 import json from Crypto.Cipher import AES impor ...

  6. 利用Python爬取基于AES对称加密算法的网易云音乐用户评论数据

    本文利用Python2.7根据网易云音乐歌曲ID爬取了该歌曲的所有用户评论数据.以id是28875120的歌曲<小岁月太着急>为示例,通过Chrome的DevTools工具获取已加密评论数 ...

  7. Go Nodejs Java Aes 128 ECB加密解密结果保持一致

    在多语言的生产环境下,常常是由一种语言进行加密而由另一种语言来进行解密,因此有必要保持各种语言之间加密解密算法的一致性.下面列出了Go,Nodejs,Java 的 Aes-128-Ecb的加密解密算法 ...

  8. Java 加密 AES 对称加密算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...

  9. AES 对称加密算法

    什么是AES? 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用. 那么 ...

  10. (4)AES分组加密算法(原理详解)

    说明:本内容参考B站UP主"可厉害的土豆"的视频讲解,强烈推荐一下该宝藏UP主 [AES加密算法]| AES加密过程详解| 对称加密| Rijndael-128| 密码学| 信息安 ...

最新文章

  1. python培训班那家好-Python培训机构去哪好
  2. 文巾解题 面试题 01.01. 判定字符是否唯一
  3. Python的问题解决: IOError: [Errno 32] Broken pipe
  4. Window Linux双系统安装 超详细教程
  5. Chrome历史版本安装包下载
  6. chrome谷歌浏览器历史版本
  7. Java 14中对switch的增强,终于可以不写break了
  8. matlab自定义排序
  9. 余沧海没有自知之明?
  10. Start request repeated too quickly解决方法
  11. 小米迎来NLP首席科学家王斌:中科院研究员,雷军崔宝秋亲学弟
  12. 专访腾讯云谢岳峰:只做连接器,五大措施支持渠道伙伴成长
  13. 酷雷曼VR丨十大“高含金量”荣誉,一起见证!
  14. compareAndSet
  15. redis: WRONGTYPE Operation against a key holding the wrong kind of value
  16. 写代码到底应该买什么键盘?
  17. 移动宽带虚拟网服务器设置,移动宽带路由器怎么设置?
  18. create和qypt qt_pyqt 与 qt c++ 开发windows客户端程序区别
  19. stm32f4xx.h文件的详解
  20. Java html转图片

热门文章

  1. 去哪儿网网页版机票数据添加代理
  2. Ypai windows部署小白也可以哦
  3. 首个自带引擎与病毒库木马专杀工具面世
  4. resnet101网络_网络标准101
  5. ubuntu中配置好清华的apt源
  6. Android Studio 安装虚拟机报错 Intel® HAXM installation failed.
  7. activiti7没有自动生成表
  8. android给EditText加金额的属性,带元,角和分,如¥12.34
  9. VMware | 装虚拟机后root默认密码 | su: Authentication failure
  10. log_mode的模式介绍