当前位置: 首页 > 面试题库 >

需要Similler Java代码进行php加密脚本

姜俊逸
2023-03-14
问题内容

我有一个PHP加密功能。我需要一个Java计数器部分。由于我对PHP的了解有限,因此无法理解。有人会两种语言,请帮忙。

PHP代码:

function encrypt($decrypted, $keyvalue) {
    // Build a 256-bit $key which is a SHA256 hash of $keyvalue.
    $key = hash('SHA256', $keyvalue, true);
    // Build $iv and $iv_base64.  We use a block size of 128 bits (AES compliant) and CBC mode.  (Note: ECB mode is inadequate as IV is not used.)
    srand(); $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
    if (strlen($iv_base64 = rtrim(base64_encode($iv), '=')) != 22) return false;
    // Encrypt $decrypted and an MD5 of $decrypted using $key.  MD5 is fine to use here because it's just to verify successful decryption.
    $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $decrypted . md5($decrypted), MCRYPT_MODE_CBC, $iv));
    // We're done!
    return $iv_base64 . $encrypted;
}

在此先感谢Aniruddha


问题答案:

这应该做。

public static byte[] encrypt(byte[] decrypted, byte[] keyvalue) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException{
    MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
    byte[] key = sha256.digest(keyvalue);

    MessageDigest md5 = MessageDigest.getInstance("MD5");
    byte[] checksum = md5.digest(decrypted);

    //The length of the value to encrypt must be a multiple of 16.
    byte[] decryptedAndChecksum = new byte[(decrypted.length + md5.getDigestLength() + 15) / 16 * 16];
    System.arraycopy(decrypted, 0, decryptedAndChecksum, 0, decrypted.length);
    System.arraycopy(checksum, 0, decryptedAndChecksum, decrypted.length, checksum.length);
    //The remaining bytes of decryptedAndChecksum stay as 0 (default byte value) because PHP pads with 0's.

    SecureRandom rnd = new SecureRandom();
    byte[] iv = new byte[16];
    rnd.nextBytes(iv);
    IvParameterSpec ivSpec = new IvParameterSpec(iv);

    Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
    cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"), ivSpec);
    byte[] encrypted = Base64.encodeBase64(cipher.doFinal(decryptedAndChecksum));

    byte[] ivBase64 = Base64.encodeBase64String(iv).substring(0, 22).getBytes();
    byte[] output = new byte[encrypted.length + ivBase64.length];
    System.arraycopy(ivBase64, 0, output, 0, ivBase64.length);
    System.arraycopy(encrypted, 0, output, ivBase64.length, encrypted.length);
    return output;
}

Java中的MCRYPT_RIJNDAEL_128和MCRYPT_MODE_CBC等效于AES / CBC /
NoPadding。您还需要一个用于Base64编码的实用程序,以上代码Base64在Apache Codec库中使用。

另外,由于加密密钥是256位,因此您将需要 Java密码学扩展(JCE)无限强度管辖权策略文件 。这些可以从Oracle网站下载。

最后,请注意ntoskrnl的警告。这种加密确实可以更好,不要从PHP手册中复制粘贴。



 类似资料:
  • 本文向大家介绍C#对文件进行加密解密代码,包括了C#对文件进行加密解密代码的使用技巧和注意事项,需要的朋友参考一下 加密代码 解密代码如下 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍如何给Python代码进行加密,包括了如何给Python代码进行加密的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了如何给Python代码进行加密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 去年11月在PyCon China 2018 杭州站分享了 Python 源码加密,讲述了如何通过修改 Python 解释器达到

  • null 下面是我当前的代码: 以下是我的结果: 原文: 正如您所看到的,加密中缺少几个字符,这也影响了解密。缺的是2号线的v和3号线的v 你知道为什么吗?

  • 本文向大家介绍PHP加密解密类实例代码,包括了PHP加密解密类实例代码的使用技巧和注意事项,需要的朋友参考一下 关键代码如下所示: 以上所述是小编给大家介绍的PHP加密解密类实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!

  • 我正在寻找一种方法,根据需要添加字体。 我最初有4谷歌API字体选择从当我建立这个特定的网站。现在它已经长大了,我想把字体选择增加到9种。 我试图找到一种通过PHP实现的方法,但我是一名设计师,所以我的PHP是“呃”。 这是我所知道的php的“草稿”。 有人想尽快帮我吗? 然后在网页上显示这个。 此外,链接标签在字体名称之间需要一个|中间。。。我不知道怎么做。谷歌提供的所有这些文件的格式是 谢谢