我正在(在我的应用程序和后端之间)传递敏感信息,例如字符串格式的密码。 后来我意识到密码可以很容易地从堆内存转储中读取,因为它以文本格式存储。
String password = "super_password";
所以我决定使用Char数组,
Char[] passChar = password.toCharArray();
但我担心密码仍然可以从内存转储中逐个字符读取。然后我想到用字节数组代替。
byte[] passByte = password.getBytes();
我的问题:使用字节数组传递密码等敏感信息是否安全? 或者有人可以推荐任何安全的东西吗?
最佳答案
也许您可以通过 MD5 或其他加密方式对密码进行加密。
package test.md5;
import java.security.MessageDigest;
public class MD5Util {
public final static String MD5(String s) {
char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
try {
byte[] btInput = s.getBytes();
// get MD5 MessageDigest obj
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// update
mdInst.update(btInput);
// get encryption string
byte[] md = mdInst.digest();
// change to hexadecimal
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
System.out.println(MD5Util.MD5("20121221"));
System.out.println(MD5Util.MD5("encrypt"));
}
}
关于java - Char 数组与 Byte 数组该使用哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27284478/