自 Java 6 以来, keytool能够使用-genseckey 命令生成密钥。以下是Java 6 keytool 文档的摘录:
-genseckey {-alias alias} {-keyalg keyalg}
{-keysize keysize} [-keypass keypass]
{-storetype storetype} {-keystore keystore}
[-storepass storepass]
{-providerClass provider_class_name {-providerArg provider_arg}}
{-v} {-protected} {-Jjavaoption}
生成密钥并将其存储在由aliasKeyStore.SecretKeyEntry
标识的新密钥中。
keyalg指定用于生成密钥的算法,keysize指定要生成的密钥的大小。keypass是用于保护密钥的密码。如果未提供密码,则会提示用户输入密码。如果在提示符处按 RETURN,则密钥密码将设置为与用于密钥库的密码相同。keypass必须至少有 6 个字符长。
因此以下命令将生成一个新的 AES 128 位密钥
keytool -genseckey -alias mykey -keyalg AES -keysize 128 \
-storetype jceks -keystore mykeystore.jks
该keytool
命令有一个拼写错误,它隐藏了有关以下内容的帮助信息-genseckey
:
% keytool -help
[...]
-genkeypair [-v] [-protected]
[-alias <alias>]
[-keyalg <keyalg>] [-keysize <taille_clé>]
[-sigalg <sigalg>] [-dname <nomd>]
[-validity <joursVal>] [-keypass <mot_passe_clé>]
[-keystore <keystore>] [-storepass <mot_passe_store>]
[-storetype <storetype>] [-providername <name>]
[-providerclass <provider_class_name> [-providerarg <arg>]] ...
[-providerpath <pathlist>]
-genkeypair [-v] [-protected]
[-alias <alias>] [-keypass <keypass>]
[-keyalg <keyalg>] [-keysize <taille_clé>]
[-keystore <keystore>] [-storepass <mot_passe_store>]
[-storetype <storetype>] [-providername <name>]
[-providerclass <provider_class_name> [-providerarg <arg>]] ...
[-providerpath <pathlist>]
该-genkeypair
命令出现两次。事实上第二个-genkeypair
应该读-genseckey
。这就是为什么我没有注意到这个命令。
我在 Java 1.6.0_26 中遇到了这个错字错误。我检查了可用的最新 Java 6 (1.6.0_31),它也有同样的问题。我还检查了最新的 Java 7 并修复了文档问题:
% java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) Server VM (build 22.1-b02, mixed mode)
% keytool -help
[...]
-genkeypair Generates a key pair
-genseckey Generates a secret key
[...]