我正在使用一个加密系统,该系统会将数据传递给第三方应用程序。加密用Java完成,解密用PHP完成。尽管进行了几次尝试,但我无法获得PHP应用程序打开的加密字符串。
为了进行测试,我创建了一个PHP脚本,该脚本也对数据进行了加密,因此可以比较Java和PHP加密的字符串。结果匹配到第21个字符,然后有所不同。这就是我所拥有的:
// Java - Encrypt
private String EncryptAES(String text,String key) throws Exception
{
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");
// Instantiate the cipher
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(text.getBytes());
String encrypttext = new BASE64Encoder().encode(encrypted);
return encrypttext;
}
RESULT: TeUZAFxoFoQy/roPm5tXyPzJP/TLAwR1aIGn2xHbZpsbY1qrKwXfO+F/DAqmeTwB0b8e6dsSM+Yy0zrQt22E2Q==
和
// PHP - Encrypt
<?php
$encrypt = $crypt = openssl_encrypt($toCrypt,"AES256","key-32-char-long");
echo $encrypt;
?>
RESULT: TeUZAFxoFoQy/roPm5tXyC05wta1Z5YOXcq4OtgFoSbfVi/bHAuD6B5tDthT8EcGXQir08UAx0QvcqRJ2fJmbQ==
显然,因为部分字符串匹配,所以正在正确地执行某些操作,但是显然,由于其余部分都不匹配,所以并非所有内容都是正确的。另外,如果我尝试用PHP解密Java字符串,则不会发生任何事情:
// PHP - Decrypt
<?php
$toDecrypt = "TeUZAFxoFoQy/roPm5tXyPzJP/TLAwR1aIGn2xHbZpsbY1qrKwXfO+F/DAqmeTwB0b8e6dsSM+Yy0zrQt22E2Q==";
$decrypt = openssl_decrypt($toDecrypt,"AES256","<key-32-char-long>");
echo $decrypt;
?>
RESULT: <nothing>
有谁知道会发生什么事吗?
由于两个加密字符串都以相同的字符开头,因此看起来您在一个中使用了ECB,在另一个中使用了CBC。
问题内容: 我一直在寻找在PHP服务器和Java客户端之间加密数据的方法。单独地,代码工作正常,我想在PHP服务器上坚持使用OpenSSL。 在尝试解码PHP加密字符串时遇到错误时,您是否看到了我所缺少的任何内容: PHP: PHP输出: 加密之前:Hello World !!! 在Base64之前:SGVsbG8gV29ybGQhISE = 加密镜头:44 加密的b64:U21yMVRGQTdR
我已经得到了这段python代码,我需要将其翻译成nodejs。python代码使用来自加密的pycrypto。在nodejs方面,我使用的是本机加密模块。加密字符串之间似乎不匹配。 上面的python代码输出 而下面的nodejs代码 输出 为什么他们不匹配?我做错什么了吗?
问题内容: 嗨,我正在尝试弄清楚如何复制在C#中但在Java中完成的文本加密。在C#中,仍然让我感到困惑并且似乎无法找到答案的那部分代码是: 基本上,Java中的这段代码等效于什么? 更新: 使用提供的PasswordDeriveBytes代码(第二个代码段),我能够完美地复制C#代码。谢谢Maarten Bodewes。 但似乎无法使其跨平台运行。基本上设置了解码代码(我在C#3.5中无法更改)
问题内容: 这是我的问题: 我有一个JAVA函数来生成加密的字符串。我必须在PHP中做同样的事情。 我的Java函数: 我的PHP函数: 这两个函数的返回值不相同。我注意到的是,在编码为base 64之前,两个函数的结果相同。因此,对我而言,问题不在于密钥的生成,而在于编码。 有人能帮忙吗? 问题答案: 答案在PHP函数hash_hmac 的文档中。 设置为TRUE时,输出原始二进制数据。FALS
问题内容: 更新 我已经对C#代码进行了更改,因此它使用的块大小为256。但是现在,您好世界看起来像这样http://pastebin.com/5sXhMV11,我无法弄清楚应该使用rtrim()获得什么一团糟的最后。 另外,当您说IV应该是随机的时,您的意思是不要再使用一次相同的IV,否则我编码的方式错误吗? 再次感谢! 你好 我正在尝试使用在C#中加密的PHP解密字符串。我似乎无法让PHP使用
我试图用JavaScript加密一个短字符串,用Java解密它。解密失败,我认为这是因为两个平台之间的块模式和/或填充不同。我尝试在Java和JavaScript中加密相同的字符串,结果不同,这表明确实存在差异。以下是创建键的Java代码: 这是我用来测试加密的Java代码: 我将公钥发送到JavaScript进程,并将其转换为ArrayBuffer,变量名为publicKey。我已经验证了Jav