当前位置: 首页 > 知识库问答 >
问题:

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

诸葛奇玮
2023-03-14

我必须在PHP中以AES CTS模式(密文窃取,有时称为AES-XTS)加密和解密数据,以便与用NET平台。英寸NET 4,本机支持这种模式。

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

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

共有2个答案

端木志诚
2023-03-14

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

作者的旧实现用于Android。因此,我认为实施将是非常有希望的。

最后,下载完源代码后,检查文件<code>aexam。c</code>,有一个很好的CTS和CBC文件加密示例。

所有学分归于布莱恩·格拉德曼。

布莱恩·格拉德曼现在维护着他自己的AES的github存储库。

丁兴德
2023-03-14

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

>

  • LDn=Decrypt(K, Cn−1)。解密倒数第二个密文块(倒数第二个128位/16字节块块),使用零作为IV。

    您可以使用标准的PHP mcrypt函数来实现这一点,只需传递

    $second_to_last_cipher=array_slice($your_cipher_text_byte_array,计数($your_cipher_text_byte_array)-32,16)

    以空Ivmcrypt_decrypt

    $second到最后一个_清除 = mcrypt_decrypt“MCRYPT_RIJNDAEL_128”,$key,$second到最后一个

    Cn = cn ||尾巴(德恩,布林)。使用倒数第二个密文块的块密码解密的最后 B−M 位,将密文填充到块大小的最接近的倍数。

    将刚刚解密的值的最后n个字节复制到密文的最后一个块中。

    $n = 16 - ($second到最后清除 % 16)

    然后使用数组复制来复制数据

    交换最后两个密文块。

    只需切换交换密文数组中最后一个和第二个最后两个单元格的内容

    使用标准CBC模式解密密文直到最后一个块。

    进行标准解密调用。

    将最后一个密文(已经在步骤1中解密)与第二个最后的密文进行异或运算。

    不言自明。

  •  类似资料:
    • 问题内容: 我目前是一名学生,并且正在学习PHP,我正在尝试对PHP中的数据进行简单的加密/解密。我进行了一些在线研究,其中一些非常令人困惑(至少对我而言)。 这是我想做的事情: 我有一个包含这些字段 (用户ID,Fname,Lname,Email,Password)的表 我要拥有的是先将所有字段加密,然后再解密(如果没有任何加密算法,是否可以用于加密/解密) 我想学习的另一件事是如何创建一种与优

    • 我有一个由以下字段组成的表(UserID、Fname、Lname、Email、Password) 我想要的是加密所有字段,然后解密(如果没有任何加密算法,是否可以使用进行加密/解密) 我想学的另一件事是如何创建一个单向的并结合一个好的“salt”。(基本上我只想有一个加密/解密的简单实现,先生/女士,您的回答将会有很大的帮助,非常感谢。谢谢++

    • 问题内容: PHP 5.3是否有任何类可提供RSA加密/解密而无需填充? 我有私钥和公钥,p,q和模数。 问题答案: 您可以使用phpseclib,这是一个纯PHP RSA实现:

    • 本文向大家介绍如何在PHP中使用AES加密算法加密数据,包括了如何在PHP中使用AES加密算法加密数据的使用技巧和注意事项,需要的朋友参考一下 在研究Discuz 的时候,发现Discuz有一套相当完美的加密算法(相对而言)。这个算法可以将数据加密后,储存起来,到需要用的时候,用之前加密的秘钥将之还原。 除了这个之外,还有AES这个算法能够将数据很好的加密起来,在传输过程中不容易被破解。 在PHP

    • 问题内容: 我需要用openssl生成的和密钥替换从Unix到Java代码的加密和解密步骤 我生成密钥 我在Unix中使用键(我需要在Java中执行) 这是我的尝试 但它不起作用,PKCS8EncodedKeySpec / X509EncodedKeySpec不正确…但是我不知道该放什么 问题答案: 我认为您在读取PEM文件时遇到问题。JPA不直接支持PEM格式。您有两种选择,要么将它们转换为DE

    • 我试图通过演示应用程序在as3crypto中加密一个文本。 现在我正试图通过php解密加密的文本,但似乎文本没有正确解密。有人知道如何通过PHP正确解密吗?还是我做错了?请启发我... 这是一个场景: > 在http://crypto.hurlant.com/demo/: 初始化向量:留空 按加密。选择base64并复制密码文本。 制作一个包含以下代码的php脚本并运行它: