我们需要使用 EC 密钥对在 java 中执行一些字符串消息的加密/解密。密钥对已使用 secp256r1 椭圆曲线生成。我们只想使用 java 核心实用程序。
加密代码 - 在 java 服务器端解密代码 - 它假设在 android 和 ios 密钥 - 非对称 EC 密钥对,在 java 加密端随时可用的公钥和在 android/ios 解密端随时可用的私钥。我们不必担心密钥分配,机制已经存在。
由于跨平台存在加密和解密代码,我们希望避免使用任何第三方库,因为它可能不适用于所有三个平台 - java、android、ios
ECIES,一种加密对我们有用,但如何在普通的 java 实用程序或一些库中进行,这些库在所有三个平台上都可用 - java、android、ios
我的示例代码(java加解密)——
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.spec.ECGenParameterSpec;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import org.bouncycastle.util.encoders.Hex;
public class Main {
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, NoSuchProviderException {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
keyGen.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom());
KeyPair ecKeyPair = keyGen.generateKeyPair();
Cipher iesCipher = Cipher.getInstance("AES/CBC/NoPadding");
Cipher iesDecipher = Cipher.getInstance("AES/CBC/NoPadding");
iesCipher.init(Cipher.ENCRYPT_MODE, ecKeyPair.getPublic());
String message = "Hello World";
byte[] ciphertext = iesCipher.doFinal(message.getBytes());
System.out.println(Hex.toHexString(ciphertext));
iesDecipher.init(Cipher.DECRYPT_MODE, ecKeyPair.getPrivate(), iesCipher.getParameters());
byte[] plaintext = iesDecipher.doFinal(ciphertext);
System.out.println(new String(plaintext));
}
public void testEncryptDecrypt() throws Exception {}
}
但上面的代码让我出错 -
Exception in thread "main" java.security.InvalidKeyException: No installed provider supports this key: sun.security.ec.ECPublicKeyImpl
在线 -iesCipher.init(Cipher.ENCRYPT_MODE, ecKeyPair.getPublic());
请建议我在这里缺少什么。