-3 java encryption elliptic-curve
我必须用 Java 编写一个程序来比较 3 种不同的非对称密码算法。我想选择密钥大小和消息大小(将随机生成),并且我想显示每种算法使用相同维度的密钥加密相同文本所需的不同时间。
我想比较 RSA、DSA 和 ECIES。前两个不会造成任何问题,但最后一个我不知道该怎么办。
主要问题是:
Cipher在Java中创建一个使用的"ECIES",它似乎不存在?ECIES 不存在于普通的 Java 库中,至少到目前为止不存在。您必须使用像 Bouncy Castle 这样的库。
对于曲线的质量,您可以查看http://safecurves.cr.yp.to(如果您有胃口)。每组域参数始终与密钥大小直接相关。我自己很喜欢 Brainpool 曲线;如果您小心使用它们,它们是相对标准且相对安全的。
注意:切勿直接使用 RSA、DSA 或 ECIES 加密明文,始终尝试使用混合加密。因此,与最多 128、192 或 256 位的输入大小进行比较。
所以,事不宜迟。
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECIES");
ECGenParameterSpec brainpoolP256R1 = new ECGenParameterSpec(
"brainpoolP256R1");
kpg.initialize(brainpoolP256R1);
KeyPair kp = kpg.generateKeyPair();
Cipher c = Cipher.getInstance("ECIES");
c.init(Cipher.ENCRYPT_MODE, kp.getPublic());
final byte[] aesKeyData = new byte[16];
SecureRandom rng = new SecureRandom();
rng.nextBytes(aesKeyData);
byte[] wrappedKey = c.doFinal(aesKeyData);
SecretKey aesKey = new SecretKeySpec(aesKeyData, "AES");
Arrays.fill(aesKeyData, (byte) 0);
}
Run Code Online (Sandbox Code Playgroud)