-2

客户使用 Cipher.encrypt() 函数(来自我不知道的某种编程语言)向我发送了一条加密消息,详细信息如下:

    var key : String = "I deleted the key intentionally";
    var encodedKey : Bytes = Encoding.toBase64(new Bytes(key, "UTF8"));

    var salt : String = "263BC60258FF4876";

    var message : String = "1234567891234567";

    var encryptAlgorithm : String = "AES/CBC/PKCS5Padding";

    var encryptedMessage : Cipher = new Cipher();
    encryptedMessage = encryptedMessage.encrypt(message, encodedKey, encryptAlgorithm, salt, 1);

我需要解密消息以便使用 PHP 从中提取数据。我曾尝试使用 php 函数 mcrypt_decrypt :

string mcrypt_decrypt ( string $cipher , string $key , string $data , string $mode [, string $iv ] )

但我无法解密该消息,因为这两个函数似乎有不同的参数。

那么有人对如何使用 PHP 解密消息有任何建议吗?

4

1 回答 1

0

以下行没有意义,似乎是“倒退”。

var encodedKey : Bytes = Encoding.toBase64(new Bytes(key, "UTF8"));

假设密钥是 Base64 编码的(这是合理的),人们会期望将其解码为字节数组并且Encoding.toBase64看起来不正确。但这是一个任务,因为语言未知,请询问客户语言是什么。

接下来,消息似乎是使用 PKCS#5 填充加密的,而 mcrypt 不支持。有几个解决方案: 1. 删除 PHP 代码中的填充。2. 使用支持 PKCS#5 填充的更好的库,例如defuse

有价值salt的可能是名称不佳的 IV(初始化向量)。

于 2016-05-21T14:13:44.397 回答