【问题标题】:Use same PHP encrypt method as in Java使用与 Java 相同的 PHP 加密方法
【发布时间】:2016-11-22 08:25:34
【问题描述】:

我制作了这个 PHP 加密脚本。现在我想知道如何在 Java 中做到这一点。我正在考虑放弃它,并用 Javascript 对其进行编码,以便它可以在两种语言中使用。不幸的是,这不是我想要的。我如何在 Java 中做到这一点?

<?php
  $encrypted = encrypt("Hello goodbye", "Pizza");
  $decrypted = decrypt($encrypted, "Pizza");

  echo $encrypted;
  echo "<br/>";
  echo $decrypted;

  function encrypt($string, $key) {
    $result = '';
    for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)+ord($keychar));
      $result.=$char;
    }

    return base64_encode($result);
  }

  function decrypt($string, $key) {
    $result = '';
    $string = base64_decode($string);

    for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)-ord($keychar));
      $result.=$char;
    }

    return $result;
  }
?>

我不是要求为我编写一些代码(但这会很棒),但我希望得到帮助或朝着正确的方向前进

编辑: 我不想通过 Java 发布和访问 PHP 文件

【问题讨论】:

  • 如果有帮助你可以看看这个:docs.oracle.com/javase/8/docs/api/java/util/Base64.html
  • 这甚至不是加密,只是在Java中实现了一些加扰。由于这不是代码服务,请发布java代码。
  • @MargaretBloom 我什至没有 Java 代码,因为我不知道该怎么做。
  • 在这种情况下,最好的做法是删除这个问题并在一些 Java 论坛上寻求帮助。获得代码后,欢迎您在这里提出新问题,前提是它满足主题指南 (help center)

标签: javascript java php encryption base64


【解决方案1】:
import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class AdvanceEncryptionSecurity {

    private static final String ALGORITHM = "AES";
    private static final int ITERATIONS = 2;
    private static final byte[] keyValue = new byte[] { 'P', 'R', 'S', 'a', 'n', 'd', 'A', 'P', 'F', 'A', 'A', 'l', 'l', 'i', 'e', 'd' };
    private static String salt = "prs and pfa";

    public static String encrypt(String value) throws Exception {
        Key key = generateKey();
        Cipher c = Cipher.getInstance(ALGORITHM);  
        c.init(Cipher.ENCRYPT_MODE, key);

        String valueToEnc = null;
        String eValue = value;
        for (int i = 0; i < ITERATIONS; i++) {
            valueToEnc = salt + eValue;
            byte[] encValue = c.doFinal(valueToEnc.getBytes());
            eValue = new BASE64Encoder().encode(encValue);
        }
        return eValue;
    }

    public static String decrypt(String value) throws Exception {
        Key key = generateKey();
        Cipher c = Cipher.getInstance(ALGORITHM);
        c.init(Cipher.DECRYPT_MODE, key);

        String dValue = null;
        String valueToDecrypt = value;
        for (int i = 0; i < ITERATIONS; i++) {
            byte[] decordedValue = new BASE64Decoder().decodeBuffer(valueToDecrypt);
            byte[] decValue = c.doFinal(decordedValue);
            dValue = new String(decValue).substring(salt.length());
            valueToDecrypt = dValue;
        }
        return dValue;
    }

    private static Key generateKey() throws Exception {
        Key key = new SecretKeySpec(keyValue, ALGORITHM);
        return key;
    }
}

试试这个代码。它可以encryptdecrypt。我假设您知道如何在 java 中编写代码。

【讨论】:

  • 我在android java上使用它所以不能导入sun.misc.BASE64Decoder和encoder
  • 我解决了导入错误。我怎样才能自己提供密钥或类似的东西?因为我没有收到与使用 PHP 加密时相同的加密短语
  • 我们有不同的算法,这就是为什么我们没有相同的加密短语。
【解决方案2】:

这个 GitHub 存储库解决了它:Android PHP Encrypt Decrypt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多