Java AES 256加密
我有以下java代码来加密使用64个字符键的字符串。 我的问题是这是AES-256加密吗?
String keyString = "C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE6C76A5C1F1716E"; byte[] keyValue = hexStringToByte(keyString); Key key = new SecretKeySpec(keyValue, "AES"); Cipher c1 = Cipher.getInstance("AES"); c1.init(Cipher.ENCRYPT_MODE, key); String data = "Some data to encrypt"; byte[] encVal = c1.doFinal(data.getBytes()); String encryptedValue = Base64.encodeBase64String(encVal); /* Copied the below code from another post in stackexchange */ public static byte[] hexStringToByte(String hexstr) { byte[] retVal = new BigInteger(hexstr, 16).toByteArray(); if (retVal[0] == 0) { byte[] newArray = new byte[retVal.length - 1]; System.arraycopy(retVal, 1, newArray, 0, newArray.length); return newArray; } return retVal; }
以下是结合divanov和laz的建议后的代码。
String keyString = "C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE6C76A5C1F1716E"; byte[] keyValue = DatatypeConverter.parseHexBinary(keyString); Key key = new SecretKeySpec(keyValue, "AES"); Cipher c1 = Cipher.getInstance("AES"); c1.init(Cipher.ENCRYPT_MODE, key); String data = "Some data to encrypt"; byte[] encVal = c1.doFinal(data.getBytes()); String encryptedValue = Base64.encodeBase64String(encVal);
是的,64字符是32字节和256位,任何256位序列都可以用作AES-256密钥。
我建议你使用DatatypeConverter.parseHexBinary (或你选择的类似的实用程序)将hex字符串转换为字节数组。
- 如何正确使用“PBEWithHmacSHA512AndAES_256”算法?
- 密码:IllegalBlockSizeException的原因是什么?
- 将文本加密为AES / CBC / PKCS7Padding
- Android:使用带有iv和密钥的AES 256位加密来加密字符串
- 如何使用带有AES和PBE的Bouncy Castle轻量级API
- JAVA AES 256和公钥加密
- 想要使用带有32字节的AES 256 CBC,但它显示了java.security.InvalidAlgorithmParameterException
- Java中的OpenSSL EVP_BytesToKey问题
- Java AES加密和解密