
这应该做。
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手册中复制粘贴。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)