这里完全是安全菜鸟。
我必须解密我收到的以Base64编码的字符串。我所拥有的就是我需要解密的String和一个String,向我发送String进行解码的服务将其称为种子。
根据我在这里和其他地方所读的内容,我得到了:
public String decrypt(String message) throws Exception
{
String salt = "PRUEBA";
Cipher c = Cipher.getInstance("AES");
SecretKeySpec key = new SecretKeySpec(salt.getBytes(), "AES");
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = Base64.decode(message.getBytes(), Base64.DEFAULT);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
String decoded=new String(Base64.decode(decryptedValue,Base64.DEFAULT));
return decoded;
}
这将返回java.security.InvalidKeyException:密钥长度不是128/192/256位。
我也尝试过this库,但它返回IllegalBlockSizeException:解密中的最后一个块不完整
不知道我是否还需要服务器端的其他功能,因为我说过我几乎不了解加密。
我在这个问题上完全迷失了。你能帮我吗?
谢谢。
答案 0 :(得分:1)
您的代码存在多个问题,并且您缺少一些关键信息(您可能会从发送数据的系统中询问)
您缺少密码,IV(可选)和密钥
密码c = Cipher.getInstance(“ AES”);
仅使用没有IV参数的AES
密码意味着您正在使用AES/ECB/PKCS5Padding
密码。您确定要使用此密码吗?不应该是AES/CBC/PKCS5Padding
吗?询问进行加密的系统应该进行何种加密(包括模式和填充)。知道它的AES可能还不够。
如果使用的模式需要IV(初始化向量),则需要知道其值。通常,IV是密文前面的128位(16字节),但是您需要确定这一点。
细盐=“ PRUEBA”;
SecretKeySpec键=新的SecretKeySpec(salt.getBytes(),“ AES”);
然后-您需要一个密钥(没有密钥,您将不会解密)。
如前所述,密钥必须为128、192或256位长(= 16、24或32字节)。如果要从另一个字符串生成它,则需要知道如何。
字符串decryptedValue =新的String(decValue);
字符串解码=新字符串(Base64.decode(decryptedValue,Base64.DEFAULT));
您确定解密后的值是另一个String的base64编码吗?
仅仅为了获取Java加密的一些示例,您在我的blog上也会受到掠夺。