使用EcpublicKey使用InvalidKeyException



当我尝试使用EC公钥加密字节数组时,我会得到以下异常:

java.security.invalidkeyexception:没有安装的提供商支持此 钥匙: sun.security.ec.ecpublickeyimpl

当我调用Cipher.init()时,会生成此异常。下面的行显示了我在程序中所做的事情:

ECPublicKey publicKey ;
ECPrivateKey privateKey;
//Generating key paire (public and private keys) 
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC", "SunEC");
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
    keyGen.initialize(571, random);
    KeyPair pair = keyGen.generateKeyPair();
    privateKey = (ECPrivateKey) pair.getPrivate();
    publicKey = (ECPublicKey) pair.getPublic();
// get an AES cipher object with CTR encription mode 
   Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
// encrypt the sharedSecret using the public key
   cipher.init(Cipher.ENCRYPT_MODE, publicKey);**
   byte[] result = cipher.doFinal(data);

我必须添加一个提供商来支持此公共密钥吗?

最后,我找到了这个例外的来源。问题是密码的初始化:

//This is the wrong initialization
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
//This is the right initialization
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding","SunJCE");

但是现在,我还有另一个例外(它不如前一个重要):

java.security.InvalidKeyException: Invalid AES key length: 170 bytes

那么,我现在必须使用什么用作为ECDSA公共密钥加密算法的?

ECDSA不用于加密相反,您使用RSA/Symetric Cipher

  KeyGenerator keygen = KeyGenerator.getInstance("AES");
  keygen.init(128);
  key = keygen.generateKey();
String plain_input = "Hush-a-bye, baby, on the tree top,When the wind blows" ; 
  //encryption
  cipher = Cipher.getInstance(""AES/EBC/PKCS5Padding");
  cipher.init(Cipher.ENCRYPT_MODE, key);
  byte[] encrypted = cipher.doFinal(plain_input.getBytes("UTF8"));
  //decryption
  cipher = Cipher.getInstance(""AES/EBC/PKCS5Padding");
  cipher.init(Cipher.DECRYPT_MODE, key);
  byte[] decrypted = cipher.doFinal(encrypted);
  String plain_output = new String(decrypted, "UTF8");

相关内容

  • 没有找到相关文章

最新更新