Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从密码生成SecretKey并从该密钥获取明文形式的密码_Java_Keystore_Javax.crypto - Fatal编程技术网

Java 从密码生成SecretKey并从该密钥获取明文形式的密码

Java 从密码生成SecretKey并从该密钥获取明文形式的密码,java,keystore,javax.crypto,Java,Keystore,Javax.crypto,我执行以下操作以基于密钥库中的用户密码存储SecretKey: KeyStore.SecretKeyEntry e = (SecretKeyEntry) store.getEntry("aeskey", protParam); secret = e.getSecretKey(); //加载密钥库 静态字节[]salt=//用于学习目的 {(字节)0xc7,(字节)0x73,(字节)0x21,(字节)0x8c, (字节)0x7e,(字节)0xc8,(字节)0xee,(字节)0x99}; 字符串a

我执行以下操作以基于密钥库中的用户密码存储SecretKey:

KeyStore.SecretKeyEntry e = (SecretKeyEntry) store.getEntry("aeskey", protParam);
secret = e.getSecretKey();
//加载密钥库
静态字节[]salt=//用于学习目的
{(字节)0xc7,(字节)0x73,(字节)0x21,(字节)0x8c,
(字节)0x7e,(字节)0xc8,(字节)0xee,(字节)0x99};
字符串alias=“aeskey”;
char[]password=“password”.toCharArray();
SecretKeyFactory factory=SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1”);
KeySpec spec=new-PBEKeySpec(密码,salt,65536256);
SecretKey tmp=工厂生成信任(规范);
SecretKey secret=newsecretkeyspec(tmp.getEncoded(),“AES/CBC/pkcs5pdadding”);
Entry AESEEntry=新密钥库。SecretKeyEntry(机密);
store.setEntry(别名、AESCentry、protParam);
现在我可以从密钥库获取SecretKey:

KeyStore.SecretKeyEntry e = (SecretKeyEntry) store.getEntry("aeskey", protParam);
secret = e.getSecretKey();

如何从SecretKey获取初始密码?

您无法从KeySpec获取原始密码。选择密码和salt的一些字节,以生成密钥规范。如果您试图加密和解密文本,则需要执行以下操作:

  • 使用密码和salt生成密钥规范
  • 生成一个SecretKey
  • 使用此函数生成密码实例
  • 使用此密码加密文本
  • 现在,假设您与脱机用户共享密码和salt。然后,他们可以使用这些来解密加密文本


    有关此问题的详细讨论,请参阅。

    您无法从密钥规范获取原始密码。选择密码和salt的一些字节,以生成密钥规范。如果您试图加密和解密文本,则需要执行以下操作:

  • 使用密码和salt生成密钥规范
  • 生成一个SecretKey
  • 使用此函数生成密码实例
  • 使用此密码加密文本
  • 现在,假设您与脱机用户共享密码和salt。然后,他们可以使用这些来解密加密文本


    有关这方面的详细讨论,请参阅。

    我考虑过使用密钥库在其中保存一组初始密码。现在我发现这是一个错误的方法。我可以使用一个初始密码将其他初始密码加密/解密为纯文本。输出将是一组加密的ByteArray。我应该把它们归档吗?或者你会建议一个更好的方法来实现它吗?这取决于用例。看一看,把一些东西从盒子里拿出来。然后,您可以选择将加密的内容存储在文件、数据库等中。感谢Jasypt,这可能最适合我。我考虑使用密钥库在其中保存一组初始密码。现在我发现这是一个错误的方法。我可以使用一个初始密码将其他初始密码加密/解密为纯文本。输出将是一组加密的ByteArray。我应该把它们归档吗?或者你会建议一个更好的方法来实现它吗?这取决于用例。看一看,把一些东西从盒子里拿出来。然后,您可以选择将加密的内容存储在文件、数据库等中。感谢Jasypt,这可能最适合我。