代码之家  ›  专栏  ›  技术社区  ›  mmundiff

在JSP中加密Sting…在PHP中解密

  •  0
  • mmundiff  · 技术社区  · 17 年前

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

    http://propaso.com/blog/?cat=6 但它在PHP中加密,在PHP中解密,这与我需要做的相反。

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

    $cipher     = "rijndael-128";
    $mode       = "cbc";
    

    和JSP密码:

    Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
    

    任何人都知道一个很好的链接,可以帮助我反转这个过程,用JSP加密,用PHP解密。

    2 回复  |  直到 17 年前
        1
  •  2
  •   erickson    17 年前

    你需要有一个静脉注射是不可预测的一个给定的信息。硬编码的IV使它可以预测。所以你需要想出一些方法,用密文传递IV。与钥匙不同,静脉注射不需要保密。

    分组密码对固定大小的明文块进行操作。如果您没有足够的纯文本输入,则必须对其进行填充,以便收件人能够区分填充和数据。链接的示例完全忽略了这一点,这是一个错误。如果 CipherOutputStream Cipher doFinal

    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();
    

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

    推荐文章