Spring Security - BytesEncryptor - 没有获得正确的加密密码

时间:2017-09-11 16:42:48

标签: java spring encryption spring-security aes

BytesEncryptor enc =  Encryptors.standard("encryptionPassword",saltKey);

byte[] encryptedPwd = enc.encrypt(pwd.getBytes());

byte[] decryptedPwd = enc.decrypt(encryptedPwd );

我使用了BytesEncryptors(Spring安全性)来加密/解密密码。我在byte []中有加密/解密的密码。我想获得加密/解密的密码。

所以我做的是,

System.out.println(new String(encryptedPwd,"UTF-8"));

System.out.println(new String(decryptedPwd,"UTF-8"));

第二条线运作良好。第一行没有给我编码密码的字符串表示。它显示出一些无用的东西。

1)为什么我的第一行不像第二行那样工作?

2)如果我想对我的spring bean配置(XML文件)使用相同的加密算法,我该怎么办?像DataSource Info /其他一些登录凭据应该用XML文件加密。(*我不在这里使用Hibernate)

2 个答案:

答案 0 :(得分:1)

对于“随机”字节数组的文本安全表示,请使用base64编码:

System.out.println(Base64Utils.encodeToString(encryptedPwd));

您可以使用Base64Utils进行编码和解码。

答案 1 :(得分:0)

您可以简单地将字节数组打印为十六进制字符串。

例如:

  • 字节 0 => 00
  • 字节 -1 => ff
  • 字节 127 => 7f
  • 字节 -128 => 80

如果您使用 Spring Security,只需使用返回 org.springframework.security.crypto.codec.Hex#encode 的方法 char[]

HexEncodingTextEncryptor 类中,您还可以找到此快捷方式:

    public String encrypt(String text) {
        return new String(Hex.encode(this.encryptor.encrypt(Utf8.encode(text))));
    }