【问题标题】:Encrypting a XML file in Java with a password使用密码在 Java 中加密 XML 文件
【发布时间】:2014-03-07 01:07:33
【问题描述】:

我正在为一个客户做这个项目,我目前坚持的部分涉及获取一个 XML 字符串并对其进行加密 - 这不需要是最先进的,它只需要对其进行加密和解密它使用密码。

到目前为止,用户输入了我使用 SHA-256 进行哈希处理的密码,然后我尝试这样做并对其进行加密:

public static String encryptString(String password, String source, String fileName, String fileDir) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, FileNotFoundException, IOException {
    FileOutputStream fos = null;
    CipherInputStream cis;

    byte key[] = password.getBytes();
    SecretKeySpec secretKey = new SecretKeySpec(key, "DES");

    Cipher encrypt = Cipher.getInstance("DES/ECB/PKCS5Padding");
    encrypt.init(Cipher.ENCRYPT_MODE, secretKey);

    InputStream fileInputStream = new ByteArrayInputStream(source.getBytes());//Here I am getting file data as byte array. You can convert your file data to InputStream  by other way too.

    File dataFile = new File(fileDir, fileName); //dataDir is location where my file is stored
    if (!dataFile.exists()) {
        cis = new CipherInputStream(fileInputStream, encrypt);
        try {
            fos = new FileOutputStream(dataFile);
            byte[] b = new byte[32];
            int i;
            while ((i = cis.read(b)) != -1) {
                fos.write(b, 0, i);
            }
            return fileName;
        } finally {
            try {
                if (fos != null) {
                    fos.flush();
                    fos.close();
                }
                cis.close();
                fileInputStream.close();
            } catch (IOException e) {
                //IOException
            }
        }
    }
    return "";
}

传入的密码是散列密码 - 从这里我尝试运行它,但我得到:

java.security.InvalidKeyException:无效密钥长度:64 字节异常。

有人可以帮忙吗?

或者告诉我用密码加密 XML 文件的更好方法?

谢谢

【问题讨论】:

    标签: java xml encryption sha256 des


    【解决方案1】:

    来自文档。

    如果这个密码需要任何算法参数, 从给定的密钥派生,底层密码实现是 应该自己生成所需的参数(使用 提供者特定的默认值或随机值),如果它正在初始化 用于加密或密钥包装,如果它引发 InvalidKeyException 正在为解密或密钥解包进行初始化。生成的 可以使用 getParameters 或 getIV 检索参数(如果 参数是 IV)。

    一种非常简单的加密方法是获取您的哈希值,并将其与文件中的字节循环异或(一次 256 位)。这是一种低级方法,但您不需要调试 API。您应该能够用非常少的代码来实现它。

    【讨论】:

    • 感谢您的帮助,但我认为问题在于我的 SHA-256 密钥正在生成 64 个字符的密码,而我只需要 32 个字符来进行 DES 加密?这可能很简单,但我不确定如何对文件进行异或运算..
    • 循环读取文件的字节数。异或第一个字节与散列的第一个字节,文件的第二个字节与散列的第二个字节,依此类推。当您遍历散列时,请从头开始。所以文件的第 9 个字节将与散列的第一个字节一起循环。要解密,您使用完全相同的过程,按顺序将文件的每个字节与哈希的一个字节进行异或。如果这还不足以让您入门,我可以提供一些代码。
    • @mttdbd 如果你够好心,我会喜欢一些代码
    • 给我一点,我会把它贴在我的 Tumblr 博客上。您可以在我的个人资料中找到该链接。
    • 好的。我将代码放在博客文章中。我想明确一点,这不是一种安全的加密方法,除了演示如何使用哈希对文件进行异或运算之外,我不保证其可行性。
    猜你喜欢
    • 2018-03-20
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2013-04-16
    • 2016-07-13
    相关资源
    最近更新 更多