相关疑难解决方法(0)

处理加密异常

在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 security encryption cryptography exception

13
推荐指数
1
解决办法
3971
查看次数

比播种SecureRandom更好的创建AES密钥的方法

我需要将加密数据从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我仍然需要传递其他东西才能解密?

还有,有更好的方法来做这个还是这个好吗?

c# java encryption cryptography

7
推荐指数
1
解决办法
6164
查看次数

标签 统计

cryptography ×2

encryption ×2

java ×2

c# ×1

exception ×1

security ×1