我正在编写一个服务器/客户端应用程序,在Java中加密通信(客户端是在Android上)。保存SecretKeySpec
的最佳方法是什么,这样我就不必在每次想要编码/解码消息时生成它?我正在使用这个方法,取自这个网站(德语):
String keyStr = "secret";
byte[] key = (keyStr).getBytes("UTF-8");
MessageDigest sha = MessageDigest.getInstance("MD5");
key = sha.digest(key);
key = Arrays.copyOf(key, 16);
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
String text = "Some text"
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encrypted = cipher.doFinal(text.getBytes());
我应该把它存储在一个静态变量中吗?或者我应该尝试一种完全不同的方法?
编辑:澄清我的问题,我的主要问题是与服务器程序,我应该如何在服务器程序?要永久保存这些小东西,我建议使用共享首选项。但是如果你想的话,你可以使用内部存储。主要区别在于共享首选项只保存基本数据类型(如int, byte, String),而在内部存储中,您可以写入整个文件(如保存游戏或临时文件)。对于这两种类型,用户都不能访问数据。
为了方便地访问保存的信息,您可以编写一个类来为您处理这些信息,因此您不必从ADK实例化整个类。
问候