为了账号安全,请及时绑定邮箱和手机立即绑定

java密码问题,当我想破译它时

java密码问题,当我想破译它时

慕婉清6462132 2021-08-25 09:56:12
我用 javafx 制作了一个应用程序,我可以编写一些东西并将其保存到数据库中。我的数据库是sqlite。这是一个非常简单的应用程序。虽然我已经在我的写作应用程序中添加了登录应用程序,但仍然可以通过任何软件打开 sqlite。而不是加密sqlite db(我不知道,我发现做起来真的很困惑:))我决定在java中加密文本,稍后当我想阅读它时,我会将它恢复正常并显示它。我从这个链接学会了如何做到这一点,我将其更改为打印字符串而不是写入文件,因此我的最终代码如下所示:public static void main(String[] args) throws Exception {    String textA = "";    String textB="";    byte[] thisismykey = "Hello How manyBytes are in@hts A".getBytes();    SecretKey secKey = new SecretKeySpec(thisismykey, "AES");    Cipher aesCipher = Cipher.getInstance("AES");    //turn your original text to byte    byte[] myoriginaltexttobyte = "Your Plain Text Here".getBytes();    //activate the encrypt method    aesCipher.init(Cipher.ENCRYPT_MODE, secKey);    //encrypt the text and assign the encrypted text to a byte array    byte[] bytecipheredoforgtext = aesCipher.doFinal(myoriginaltexttobyte);    //change it to string with new string    textA = new String(bytecipheredoforgtext);    System.out.println(textA);    //get the bytes of encrypted text and assign it to a byte array    byte[] byteofencryptedtext = textA.getBytes();    //activate the decrypt mode of the cipher    aesCipher.init(Cipher.DECRYPT_MODE, secKey);    //decrypt the encrypted text and assign it to a byte array    byte[] byteofencryptedbacktonormaltext = aesCipher.doFinal(byteofencryptedtext);    //change it to string with new string    textB = new String(byteofencryptedbacktonormaltext);    System.out.println(textB);}现在加密和解密使用相同的方法,它可以完美运行,但我想将其更改为具有不同方法的类,以便我可以使用一种方法加密文本并使用另一种方法解密。但是当我将事物分开时,解密效果不佳。加密工作良好。我该怎么办?
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

我不确定错误是由这个引起的,但是您正在执行的 String 和 byte[] 之间的转换可能适用于字符集范围内的字节,但是当数据被加密时,您可能在数组中有任何字节,不仅可以打印人物。

在获得带有加密文本的 byte[] 后,将其编码为 Base64 并存储字符串表示。

解密的时候,先把Base64解码成byte[],然后再解密。


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信