加密字符串到 byte[]

Encrypted String to byte[]

我需要加密我正在使用的密码 this 教程

我需要将加密的密码作为字符串存储在 sql 数据库中,当我尝试读取字符串并将其转换为 byte[] 时遇到问题,byte[] 与原始加密的不同字节[]

byte[] encrypted = encryper.encrypte("pavel");

            Log.i("info","encrypted : "+encrypted);

            String pass = String.valueOf(encrypted);

            byte[] passBytes = pass.getBytes();

            Log.i("info","passBytes : "+passBytes);

            Log.i("info","decrypted : "+encryper.decrypte(passBytes));

日志

I/info: encrypted : [B@3832a394
I/info: passBytes : [B@33deee3d
I/info: decrypted : 

解密方法

public String decrypte(byte[] text)
{

    byte[] textDecrypted = new byte[0];

    try {

        cipher.init(Cipher.DECRYPT_MODE, myDesKey);
        textDecrypted = cipher.doFinal(text);
        Log.i("info","do final : "+textDecrypted);

    }catch (InvalidKeyException e) {e.printStackTrace();
    }catch (IllegalBlockSizeException e){e.printStackTrace();}
    catch (BadPaddingException e){e.printStackTrace();}

    return new String(textDecrypted);
}

但是如果我写 public String decrypte(byte[] text) {

    byte[] textDecrypted = new byte[0];

    try {

        cipher.init(Cipher.DECRYPT_MODE, myDesKey);
        textDecrypted = cipher.doFinal(text);
        Log.i("info","do final : "+textDecrypted);

    }catch (InvalidKeyException e) {e.printStackTrace();
    }catch (IllegalBlockSizeException e){e.printStackTrace();}
    catch (BadPaddingException e){e.printStackTrace();}

    return new String(textDecrypted);
}

但如果我把原始字节[]全部工作

encryper.decrypte(encrypted)

您在控制台上看到的是 byte[]toString() 方法的结果。不代表实际内容。相反,它是对象的 ID。它们是不同的,因为你有不同的对象。

此外,如果您使用 String.valueOf(encrypted),它将返回到 valueOf(Object) method,因为没有 valueOf(byte[])。这给你的不是数组内容的字符串表示,而是 toString().

生成的相同对象 ID

使用例如new String(encrypted) 将字节数组的内容转换为可读的字符串。

我会使用 Base64.Encoder(java.util,因为 Java 8)将字节数组编码为字符串,然后将其保存到数据库,然后从数据库读取到字符串并解码它使用 Base64.decoder

到字节数组