如何检查Java中的加密结果(SHA1PRNG和AES)?

时间:2018-11-26 08:04:38

标签: java aes sha1

我制作了一个类,该类具有使用SHA1PRNG和AES算法加密数据的方法。

public String encrypt(String str, String pw) throws Exception{ 
    byte[] bytes = pw.getBytes();
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    sr.setSeed(bytes);
    KeyGenerator kgen = KeyGenerator.getInstance("AES");    
    kgen.init(128,sr);

    SecretKey skey = kgen.generateKey();
    SecretKeySpec skeySpec = new SecretKeySpec(skey.getEncoded(),"AES");
    Cipher c = Cipher.getInstance("AES");
    c.init(Cipher.ENCRYPT_MODE, skeySpec);

    byte[] encrypted = c.doFinal(str.getBytes());
    return Hex.encodeHexString(encrypted); 
}

我在主体中使用了这种方法。

public static void main(String[] args) throws Exception{
    Encrytion enc = new Encrytion();  //my class name has a typo :(
    enc.encrypt("abcde", "abcdfg");
    System.out.println(enc);

}

我的结果是

  

com.dsmentoring.kmi.Encrytion@34340fab

只是我的包名+类名+一些数字(我猜这是实际数据的参考地址吗?)

我想像这样查看我的加密结果,例如“ a13efx34123fdv .......”。我需要在主方法中添加什么?有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您正在打印Encryption对象,而不是函数调用的结果。 您可以改为:

public static void main(String[] args) throws Exception{
    Encrytion enc = new Encrytion();  //my class name has a typo :(
    String result = enc.encrypt("abcde", "abcdfg");
    System.out.println(result);
}