我在应用程序中要求将一些加密数据发送到服务器。服务器端告诉我使用Blowfish / crypt(3)/ $ 2y $并向他发送加密数据。我正在使用以下代码来完成工作:
public String encrypt(String data) {
String Key = "My_PRIVATE_KEY";
try {
byte[] KeyData = Key.getBytes();
SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, KS);
return bytesToHex(cipher.doFinal(data.getBytes()));
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
private String bytesToHex(byte[] data) {
if (data == null) {
return null;
}
int len = data.length;
String str = "";
for (int i = 0; i < len; i++) {
if ((data[i] & 0xFF) < 16) {
str = str + "0" + java.lang.Integer.toHexString(data[i]&0xFF);
}
else {
str = str + java.lang.Integer.toHexString(data[i]&0xFF);
}
}
return str;
}
但是我得到了错误的结果。我尝试使用以下方法打印andoid支持的算法名称:
String msg = "";
Object[] o = Security.getAlgorithms("Cipher").toArray();
for (int i=0; i<o.length; i++) {
msg = msg + "\n" + ((String)o[i]);
}
((TextView)findViewById(R.id.txt)).setText(msg);
它在列表中显示BLOWFISH,但不包括crypt(3)2y。任何人都能引导我走向正确的方向...... ??? 我正在使用QuickHash来检查输出有效性。
答案 0 :(得分:0)
crypt
一起使用时, CRYPT_BLOWFISH
实际上是定义了基于密码的密码导出函数(PBKDF)。所以你应该使用兼容的兼容版本的bcrypt,例如: this one