java - Char 数组与 Byte 数组该使用哪一个?

标签 java arrays char byte

我正在(在我的应用程序和后端之间)传递敏感信息,例如字符串格式的密码。 后来我意识到密码可以很容易地从堆内存转储中读取,因为它以文本格式存储。

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/

相关文章:

java - 如何使用静态方法定义嵌套静态类,继承自 Java 中的嵌套接口(interface)?

java - + 运算符在 Java 中如何工作?

c - char 数组初始值设定项错误中元素过多

javascript - 如何将数组添加到我的行数据中?

ios - 将一个数组从 Swift 中的特定索引复制到另一个数组

java - 两个人之间通话的简单 Twilio 示例

java - Vaadin 8 隐藏网格标题

c - 如何有效地解析c中的字符串

c - 指针有问题并在 C 中使用 strcmp()

c++ - 评估 if 语句中的单个字符 : C++