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

需要Similler Java代码进行php加密脚本,第1张

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

这应该做。

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.enprebase64(cipher.doFinal(decryptedAndChecksum));    byte[] ivbase64 = base64.enprebase64String(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手册中复制粘贴。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5501328.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-13
下一篇2022-12-13

发表评论

登录后才能评论

评论列表(0条)

    保存