Java AES加密问题

Java AES加密问题,java,arrays,string,encryption,hex,Java,Arrays,String,Encryption,Hex,我正在做一个项目,我需要用AES加密一个字符串。程序需要能够接收字符串并输出十六进制加密字符串以及密钥,或者使用用户指定的密钥和字符串输出未加密文本,即,该程序需要能够在不同的情况下完成这两项工作,即我应该能够在我的机器上输入1234并输出加密文本:asdf Key:ghjk;我的朋友应该能够在他的手机上输入加密文本:asdf KEy:ghjk,然后输出1234 以下是我目前掌握的情况: 希望有人能帮我 编辑: 我最大的问题是将String encryptedString转换为sKeySpec,

我正在做一个项目,我需要用AES加密一个字符串。程序需要能够接收字符串并输出十六进制加密字符串以及密钥,或者使用用户指定的密钥和字符串输出未加密文本,即,该程序需要能够在不同的情况下完成这两项工作,即我应该能够在我的机器上输入1234并输出加密文本:asdf Key:ghjk;我的朋友应该能够在他的手机上输入加密文本:asdf KEy:ghjk,然后输出1234 以下是我目前掌握的情况:

希望有人能帮我

编辑:

我最大的问题是将String encryptedString转换为sKeySpec,并找出如何防止“unencrypt”函数给用户一个错误,说他们输入的字符串没有正确填充。我知道这不是真的,因为我尝试过加密字符串,然后将它的加密形式粘贴到unencryptor中,只会得到一个错误。如果我消除了所有的if条件,让它加密一个字符串,然后在同一个实例中取消加密,那么程序就可以正常工作;我认为这是因为保留了keyGen的随机密钥

您的问题是:

KeyGenerator kgen = KeyGenerator.getInstance("AES");kgen.init(128); 
SecretKey skey = kgen.generateKey();
byte[] bytes = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(bytes, "AES");
正如您编写的那样,您的程序在每次运行时都会生成一个新的随机键,该键从未保存或显示在任何地方。使用此密钥加密的任何内容实际上都无法解密


您需要做的是想出一些从用户输入生成密钥的方案,而不是使用KeyGenerator随机生成密钥。该方案将如何工作取决于您。

根据您使用的AES变体,您的密钥需要为128、192或256比特长。 您可以使用哈希算法从用户输入生成具有特定长度的密钥

String key;
byte[] keydata = hashFunctionToMakeToKeytheRightSize(key);
SecretKeySpec secretKeySpec = new SecretKeySpec(keydata, "AES");

另请参见:

您是否可以编辑您的问题以明确解决您的问题?从代码中的注释推断您的问题有点困难。找不到方法:。HasFunctionToMaketKeyTheRightSize
String key;
byte[] keydata = hashFunctionToMakeToKeytheRightSize(key);
SecretKeySpec secretKeySpec = new SecretKeySpec(keydata, "AES");