如何检查 Java 中的加密结果(SHA1PRNG 和 AES)?
How can I check the result of encryption (SHA1PRNG and AES) in Java?
我做了一个class,它有一个使用 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
只是我的包名 + class 名称 + 和一些数字(我猜这是实际数据的参考地址?)
我想像这样'a13efx34123fdv....... '看到我的加密结果。我需要在我的主要方法中添加什么?有什么建议吗?
您正在打印 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);
}
我做了一个class,它有一个使用 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
只是我的包名 + class 名称 + 和一些数字(我猜这是实际数据的参考地址?)
我想像这样'a13efx34123fdv....... '看到我的加密结果。我需要在我的主要方法中添加什么?有什么建议吗?
您正在打印 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);
}