2009-11-19 48 views
0
KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
    kgen.init(128); // 192 and 256 bits may not be available 

在eclipse中,当我选择KeyGenerator并右键单击打开声明时,我打开一个窗口。开放声明中的这个错误是什么?

click here to see error image(图片链接断开)

你能解释一下什么是错在这里吗?顺便说一句这里是完整的代码

package org.temp2.cod1; 

import java.security.*; 
import javax.crypto.*; 
import javax.crypto.spec.*; 
import java.io.*; 

/** 
* This program generates a AES key, retrieves its raw bytes, and 
* then reinstantiates a AES key from the key bytes. 
* The reinstantiated key is used to initialize a AES cipher for 
* encryption and decryption. 
*/ 

public class AES1 
{ 

    /** 
    * Turns array of bytes into string 
    * 
    * @param buf Array of bytes to convert to hex string 
    * @return Generated hex string 
    */ 
    public static String asHex (byte buf[]) 
    { 
     StringBuffer strbuf = new StringBuffer(buf.length * 2); 
     int i; 

     for (i = 0; i < buf.length; i++) 
     { 
      if (((int) buf[i] & 0xff) < 0x10) 
       strbuf.append("0"); 

      strbuf.append(Long.toString((int) buf[i] & 0xff, 16)); 
     } 

     return strbuf.toString(); 
    } 

    public static void main(String[] args) throws Exception 
    { 

     String message="This is just an example"; 

     // Get the KeyGenerator 

     KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
     kgen.init(128); // 192 and 256 bits may not be available 


     // Generate the secret key specs. 
     SecretKey skey = kgen.generateKey(); 
     byte[] raw = skey.getEncoded(); 

     SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 


     // Instantiate the cipher 

     Cipher cipher = Cipher.getInstance("AES"); 

     cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 

     byte[] encrypted = 
     cipher.doFinal((args.length == 0 ? 
     "This is just an example" : args[0]).getBytes()); 
     System.out.println("encrypted string: " + asHex(encrypted)); 

     cipher.init(Cipher.DECRYPT_MODE, skeySpec); 
     byte[] original = 
     cipher.doFinal(encrypted); 
     String originalString = new String(original); 
     System.out.println("Original string: " + 
     originalString + " " + asHex(original)); 
    } 
} 

回答

1

这只是显示出源到KeyGenerator类没有随JDK - 想必这会违反出口限制或类似的东西。 (我的Eclipse安装中也收到了相同的消息,尽管其他类显示源代码没有问题,所以我怀疑它不是配置问题。)

您是否真的需要查看源代码到KeyGenerator?你想知道什么?

+0

源代码不存在,但那里是执行keygenerator类的类文件/二进制文件吗? – rover12 2009-11-19 10:24:02

+0

换句话说.. ..我的程序运行那部分代码或不是? – rover12 2009-11-19 10:24:37

+1

是的,二进制代码在那里,而不是源。如果二进制文件不存在,则会导致编译时失败。 – 2009-11-19 10:27:23