Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JSP中加密Sting。。。用PHP解密_Php_Jsp_Encryption - Fatal编程技术网

在JSP中加密Sting。。。用PHP解密

在JSP中加密Sting。。。用PHP解密,php,jsp,encryption,Php,Jsp,Encryption,我必须用php创建一个握手页面,该页面将获取一个查询字符串,该字符串在Java/JSP中为函数加密,并在应用程序中使用php对其解密 我发现这是一个很好的起点,但它在PHP中加密,在PHP中解密,这与我需要做的相反 任何人都知道PHP/JSP中常用的密码。从上面的链接来看,CBC似乎是一个答案,代码如下: PHP密码/模式: $cipher = "rijndael-128"; $mode = "cbc"; 和JSP密码: Cipher cipher = Cipher.get

我必须用php创建一个握手页面,该页面将获取一个查询字符串,该字符串在Java/JSP中为函数加密,并在应用程序中使用php对其解密

我发现这是一个很好的起点,但它在PHP中加密,在PHP中解密,这与我需要做的相反

任何人都知道PHP/JSP中常用的密码。从上面的链接来看,CBC似乎是一个答案,代码如下:

PHP密码/模式:

$cipher     = "rijndael-128";
$mode       = "cbc";
和JSP密码:

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
任何人都知道一个很好的链接,可以帮助我反转这个过程,用JSP加密,用PHP解密

谢谢


找到答案,谢谢

对于给定的消息,您需要进行无法预测的静脉注射。硬编码的IV使它可以预测。所以你需要想出一些方法,用密文传递IV。与钥匙不同,静脉注射不需要保密

分组密码对固定大小的明文块进行操作。如果您没有足够的纯文本输入,则必须对其进行填充,以便收件人能够区分填充和数据。链接的示例完全忽略了这一点,这是一个错误。如果使用
CipherOutputStream
,则部分最终块将从密文中自动截断。如果直接使用
Cipher
对象,则部分块将导致
doFinal
方法引发异常。相反,使用类似pkcs5p的东西

一个合适的Java示例如下:

SecretKey secret = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters param = cipher.getParameters();
/* In addition to ciphertext in "cos", recipient needs IV. */
byte[] iv = param.getParameterSpec(IvParameterSpec.class).getIV();
CipherOutputStream cos = new CipherOutputStream(output, cipher);
byte[] buf = new byte[2048];
while (true) {
  int n = input.read(buf, 0, buf.length);
  if (n < 0)
    break;
  cos.write(buf, 0, n);
}
cos.flush();
SecretKey secret=新的SecretKey规范(key,“AES”);
Cipher Cipher=Cipher.getInstance(“AES/CBC/PKCS5Padding”);
cipher.init(cipher.ENCRYPT_模式,secret);
AlgorithmParameters param=cipher.getParameters();
/*除了“cos”中的密文外,收件人还需要IV*/
字节[]iv=param.getParameterSpec(IvParameterSpec.class).getIV();
CipherOutputStream cos=新的CipherOutputStream(输出,密码);
字节[]buf=新字节[2048];
while(true){
int n=输入读取(buf,0,buf.长度);
if(n<0)
打破
cos.write(buf,0,n);
}
cos.flush();

接收要加密的明文的JSP在哪里?您希望JSP如何格式化其输出(包括IV)?

链接文章中有许多与您发布的第一个链接相同的错误。