在java中加密和解密List<String>

Posted

技术标签:

【中文标题】在java中加密和解密List<String>【英文标题】:Encrypting and decrypting List<String> in java 【发布时间】:2016-03-27 03:51:14 【问题描述】:

我有一个移动应用和一个桌面应用。我在桌面应用中有多个列表。我想加密列表中的所有值并发送到一个文件,然后从移动应用程序中我想从文件中检索数据并解密这些值并显示它们。我第一次使用加密和解密概念。我尝试通过加密发送字符串并且它有效。但我想加密许多列表。我将如何做到这一点。任何代码都会有所帮助。

用于加密:

 KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
 SecretKey myDesKey = keygenerator.generateKey();
 Cipher desCipher;
 desCipher = Cipher.getInstance("DES");
 byte[] text = "Hello".getBytes("UTF8");


 desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);
 byte[] textEncrypted = desCipher.doFinal(text);
 String s = new String(textEncrypted);
 System.out.println(s);

用于解密

  desCipher.init(Cipher.DECRYPT_MODE, myDesKey);
  byte[] textDecrypted = desCipher.doFinal(textEncrypted);
  s = new String(textDecrypted);
  System.out.println(s);

我将此代码用于字符串,但如何与列表实现相同。请帮助。

提前致谢。

【问题讨论】:

不加密你会怎么做?二进制?逗号分隔?制表符分隔? XML? JSON?无论您使用哪种方式来组合和稍后拆分数据,都一样,除了加密和解密组合的数据。 你的意思是我必须在 stringbuilder 中添加所有内容,然后加密 stringbuilder 并发送到文件 你没有加密一个类。你加密数据。您选择要加密的数据。它必须是二进制形式,也就是字节。所以,首先,忘记加密。如果您不需要加密,您将如何发送数据? FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); 我是用上面两个写数据的 【参考方案1】:

您可以使用ArrayList 并添加此列表中的每个值。

List<String> list = new ArrayList<>();
for () 
   // here first you encrypt the data then add to the list

将其保存到文件中。 然后当您检索时,您再次将 then 放入列表中,然后:

for(String str: list) 
    // do decryption  
 

【讨论】:

我已经在列表中有值,我想加密它们并发送到文件。我不想将加密值添加到列表中 你想把文件保存到本地吗?【参考方案2】:

您可以通过

将列表转换为字节数组
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(list);
byte[] text = bos.toByteArray();

然后像一般一样加密文本。然后您可以将解密的字节数组转换为列表为

ByteArrayInputStream bis = new ByteArrayInputStream(textDecrypted); ObjectInputStream ois = new ObjectInputStream(bis); List<String> result = (List<String>) ois.readObject();

例子:

        List<String> list = new ArrayList<String>();
        list.add("Hello");
        list.add(" World!!");

        System.out.println(list);

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(list);
        byte[] text = bos.toByteArray();

        KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
        SecretKey myDesKey = keygenerator.generateKey();
        Cipher desCipher;
        desCipher = Cipher.getInstance("DES");

        desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);
        byte[] textEncrypted = desCipher.doFinal(text);

        desCipher.init(Cipher.DECRYPT_MODE, myDesKey);
        byte[] textDecrypted = desCipher.doFinal(textEncrypted);

        ByteArrayInputStream bis = new ByteArrayInputStream(textDecrypted);
        ObjectInputStream ois = new ObjectInputStream(bis);
        List<String> result = (List<String>) ois.readObject();

        System.out.println(result);

【讨论】:

加密后如何写入文件并从文件中读取并解密并添加回列表 @sup link 此处示例如何将 byte[] 写入文件,但要解密您需要密钥,但我认为您需要做其他事情... 我应该使用哪种方法来解密数据 如何加密多个列表并发送到文件。我理解单个列表 @sup 你需要加密多个列表并保存到单个文件吗?

以上是关于在java中加密和解密List<String>的主要内容,如果未能解决你的问题,请参考以下文章

关于C++中字符串加密及解密

如何用Java进行3DES加密解密

delphi 数字加密和解密算法

如何解密JWT,在java中,当加密的令牌以String的形式存在时,用JWE加密?

序列化和反序列化在浏览器和 Web 服务器之间传递的数据加密解密

js解密方法