在Java中处理加密\解密时,这个非常基本的代码段很常见.
final Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
cipher.doFinal(*something*);
Run Code Online (Sandbox Code Playgroud)
仅这三行,可能会抛出六个异常,我不确定处理它们的最干净(在代码可读性方面)是什么.尝试六个catch子句对我来说真的很像气味.
在使用这些物体时,是否有微图案或最佳实践,我显然不知道?
编辑
对不起,我想我没有很好地解释自己.我的问题不是关于避免try\catch子句,而是如果有一种常见的方法来处理类似的情况.
例外情况是
NoSuchPaddingException, NoSuchAlgorithmException
InvalidAlgorithmParameterException, InvalidKeyException,
BadPaddingException, IllegalBlockSizeException
Run Code Online (Sandbox Code Playgroud) 我需要将加密数据从Java客户端发送到C#服务器.现在我正在学习如何使用AES(要求)加密数据.继这个接受的答案用AES加密/解密我正在做以下事情:
byte[] keyStart = "qweroiwejrwoejlsifeoisrn".getBytes(); // Random character string
byte[] toEncrypt = myMessageString.getBytes();
keyGen = KeyGenerator.getInstance("AES");
sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(keyStart);
keyGen.init(128, sr);
SecretKey secretKey = keyGen.generateKey();
byte[] secretKeyByte = secretKey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(secretKeyByte, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
cipher.doFinal(toEncrypt);
Run Code Online (Sandbox Code Playgroud)
由于算法使用了一个SecureRandom使用keyStart我不知道这是否可以解码,C#甚至在另一个Java程序中解码,没有SecureRandom.
这个加密/解密是否能够只知道keyStart我正在使用的值或者因为SecureRandom我仍然需要传递其他东西才能解密?
还有,有更好的方法来做这个还是这个好吗?