首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PHP中使用AES CBC+CTS (密文窃取)模式对数据进行加密/解密?

如何在PHP中使用AES CBC+CTS (密文窃取)模式对数据进行加密/解密?
EN

Stack Overflow用户
提问于 2012-05-02 09:28:32
回答 2查看 3.6K关注 0票数 2

为了与用.NET平台编写的远程系统进行互操作,我必须在PHP模式下加密和解密数据(密码文本窃取,有时称为AES-XTS)。在.NET 4中,这种模式是本地支持

对于PHP,我找不到解决方案,基于手册,mcrypt似乎不支持这种模式。

有人能解释一下普通CBC和CTS之间的区别吗?是否有可能通过使用现有的模块/库使后者在PHP中工作呢?

EN

回答 2

Stack Overflow用户

发布于 2012-05-02 22:09:52

这是维基百科文章中插入的步骤,我的评论解释了

  1. LDn =解密(K,Cn−1)。解密第二个到最后一个密文块(第二个到最后一个128位/16字节块),使用零作为IV。 您可以使用标准的PHP函数来完成这一任务,只需传递 $second_to_last_cipher=array_slice($your_cipher_text_byte_array,计数($your_cipher_text_byte_array)-32,16) 到具有空Iv的mcrypt_decrypt $second_to_last_clear = mcrypt_decrypt"MCRYPT_RIJNDAEL_128",$key,$second_to_last_ciphe)
  2. Cn = Cn _x_x_尾(Dn,B_(−)M)。使用第二到最后一个密文块的块密码解密的最后B、−、M位将密文压缩到最接近的块大小的倍数。 将您刚刚解密的值的最后n个字节复制到最后一个密文块中。 $n = 16 - ($second_to_last_clear % 16) 然后使用数组复制来复制数据。
  3. 交换最后两个密文块。 只需切换密码文本数组中最后两个单元格的内容。
  4. 使用标准CBC模式直到最后一个块对密文进行解密。 进行标准解密呼叫。
  5. 独占-或最后一个密文(已在步骤1中解密)和第二个ciphertext.Self解释。
  6. 将明文截断为原始密文的长度。
票数 1
EN

Stack Overflow用户

发布于 2014-06-11 10:55:04

我在C中找到了一个AES算法的实现,你可以用源代码这里找到它。

作者的旧实现在安卓中使用。因此,我认为实施是非常有希望的。

最后,在下载了源代码之后,再检查文件aesxam.c,这里有一个很好的CBC文件加密示例。

所有学分都归布赖恩·格拉德曼所有。

Brian现在维护他自己的github AES回购

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10411036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档