代码之家  ›  专栏  ›  技术社区  ›  Chry Cheng

用keytool生成128位密钥

  •  7
  • Chry Cheng  · 技术社区  · 17 年前

    http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator 不支持或不允许小于512位的键。

    密钥对将与ff一起使用。代码段:

    Security.addProvider(new BouncyCastleProvider());
    
    KeyStore keyStore = KeyStore.getInstance("PKCS12");
    
    FileInputStream keyStoreSource = new FileInputStream("keystore");
    
    try {
        keyStore.load(keyStoreSource, "password".toCharArray());
    } finally {
        keyStoreSource.close();
    }
    
    String alias = (String) keyStore.aliases().nextElement();
    PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, "password".toCharArray());
    X509Certificate certificate = (X509Certificate) keyStore.getCertificate(alias);
    
    CMSEnvelopedDataStreamGenerator generator = new CMSEnvelopedDataStreamGenerator();
    
    generator.addKeyTransRecipient(certificate);
    
    OutputStream output2 = generator.open(output, CMSEnvelopedDataGenerator.AES128_CBC, BouncyCastleProvider.PROVIDER_NAME);
    
    try {
        IOUtils.copy(input, output2);
    } finally {
        output2.close();
        output.close();
    }
    

    其中,output是保存加密数据的OutputStream,input是读取明文数据的InputStream。

    3 回复  |  直到 17 年前
        1
  •  5
  •   igorp1024    14 年前

    你只需要指定不同的存储类型

    keytool -genseckey -alias check2 -keyalg AES -keysize 128 -storepass changeit -storetype JCEKS -keystore ks.jck

        2
  •  2
  •   joeforker    17 年前

    证书用于公钥加密,不包含对称分组密码AES-128的加密密钥。相反,公钥加密只用于加密或协商128位AES密钥,其余会话使用AES。

    128位AES密钥不是证书,它只是来自加密强随机数生成器的128位,或者来自使用哈希算法(如 PBKDF2

        3
  •  0
  •   Sani Huttunen    17 年前

    不能生成小于512位的密钥对是有意义的。公钥密码术需要比对称密钥密码术更长的密钥来维持相同的安全级别。对于公钥加密,不建议使用128位密钥对。