爪哇版:public class EncryptUtil { public static String AESEncode(String encodeRules, String content) { try { KeyGenerator keygen = KeyGenerator.getInstance("AES"); keygen.init(128, new SecureRandom(encodeRules.getBytes())); SecretKey original_key = keygen.generateKey(); byte[] raw = original_key.getEncoded(); SecretKey key = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] byte_encode = content.getBytes("utf-8"); byte[] byte_AES = cipher.doFinal(byte_encode); return new String(Base64.getEncoder().encode(byte_AES)); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; }}当我运行此代码时:System.out.println(EncryptUtil.AESEncode("1234567812345678", python&java"));我有:V5FFUgDi7VZaJ0qGzDISoA==蟒蛇版本:import base64from Crypto.Cipher import AESBLOCK_SIZE = 16 # Bytespad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \ chr(BLOCK_SIZE - len(s) % BLOCK_SIZE)unpad = lambda s: s[:-ord(s[len(s) - 1:])]class AESUtil: __BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size def __init__(self, key): self.key = key def encrypt(self, raw): raw = pad(raw) cipher = AES.new(self.key, AES.MODE_ECB) return base64.b64encode(cipher.encrypt(raw))我知道java默认使用AES/ECB/PKCS#5,但是当我运行该encrypt方法时:cipher_text = AESUtil("1234567812345678").encryt('python&java')得到了:b'3mjygpK1d7ThCRK98ssZhA=='我在 Google 上找到了 pad 和 unpad。如何编辑我的 PYTHON 代码使 cipher_text 等于 JAVA 加密。有人可以知道如何修复它吗?
1 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
您使用不同的加密密钥
在 Java 中
System.out.println(EncryptUtil.AESEncode("1234567812345678", "python&java"));
看代码:
KeyGenerator keygen = KeyGenerator.getInstance("AES");
keygen.init(128, new SecureRandom(encodeRules.getBytes()));
SecretKey original_key = keygen.generateKey();
byte[] raw = original_key.getEncoded();
如果您打印raw密钥,您将获得fd839759956ba4a47922e8ee7c902f52(十六进制编码),这就是加密密钥
如果您想使用提供的密钥目录,您应该使用
byte[] raw = encodeRules.getBytes();
// (assuming encodeRules has 16 bytes)
如何编辑我的 PYTHON 代码使 cipher_text 等于 JAVA 加密
这很棘手..您可能看看SecureRandom是如何工作的,但恕我直言,修复 Java 实现以创建您期望的密钥更容易
不管我认为实现不够安全 - 使用 ECB 和简单的密钥。
添加回答
举报
0/150
提交
取消