加密字符串到byte []

时间:2016-04-26 13:45:13

标签: java encryption bytearray password-encryption jce

我需要加密密码我正在使用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);
}

但如果我写公共字符串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)

2 个答案:

答案 0 :(得分:2)

我会使用Base64.Encoder(java.util,自Java 8)将字节数组编码为String,然后将其保存到DB,然后将其从DB读取到String并使用Base64.decoder将其解码为字节数组

答案 1 :(得分:1)

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

此外,如果您使用String.valueOf(encrypted),它将会回退到valueOf(Object) method,因为没有valueOf(byte[])。这不会为您提供数组内容的字符串表示形式,而是由toString()生成的相同对象ID。

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