【问题标题】:java cryptography KeyGeneratorjava密码学KeyGenerator
【发布时间】:2012-10-16 11:46:45
【问题描述】:

我的代码是

import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class apiKeyGenerate {
  public static void main(String[] args) throws Exception {
   // Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

    byte[] input = "input".getBytes();
    byte[] ivBytes = "1234567812345678".getBytes();

    Cipher cipher =  Cipher.getInstance("DES/CBC/PKCS5Padding");
    KeyGenerator generator = KeyGenerator.getInstance("AES", "BC");
    generator.init(128);
    Key encryptionKey = generator.generateKey();
    System.out.println("key : " + new String(encryptionKey.getEncoded()));
   }
}

在上面的代码中,异常是:- java.security.NoSuchProviderException: 那就是

Exception in thread "main" java.security.NoSuchProviderException: no such provider: BC
    at sun.security.jca.GetInstance.getService(Unknown Source)
    at javax.crypto.SunJCE_b.a(DashoA13*..)
    at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
    at apiKeyGenerate.main(apiKeyGenerate.java:17)

我该怎么做? 提前致谢

【问题讨论】:

    标签: java security cryptography encryption


    【解决方案1】:

    在一行

    KeyGenerator generator = KeyGenerator.getInstance("AES", "BC");
    

    BC 表示 BouncyCastle?你为什么评论了Security.addProvider( new BouncyCastleProvider() )?然后,您需要将该提供程序添加到 Java 安全 policy 文件中。

    查看getInstance JavaDoc - 在未配置提供程序时恰好抛出NoSuchProviderException。你试过没有提供者参数的getInstance(...) 方法吗?

    干杯,

    【讨论】:

    【解决方案2】:
    import java.security.Key;
    
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    public class Test1 {
      public static void main(String[] args) throws Exception {
       // Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    
          byte[] input = "input".getBytes();
            byte[] ivBytes = "1234567812345678".getBytes();
    
            Cipher cipher =  Cipher.getInstance("DES/CBC/PKCS5Padding");
            **KeyGenerator generator = KeyGenerator.getInstance("AES");**
            generator.init(128);
            Key encryptionKey = generator.generateKey();
            System.out.println("key : " + new String(encryptionKey.getEncoded()));
           }
    
    }
    

    代替

    KeyGenerator generator = KeyGenerator.getInstance("AES", "BC");
    

    这一行你可以试试这个

    KeyGenerator generator = KeyGenerator.getInstance("AES");
    

    我认为这很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多