Android如何在Android中实现Blowfish / crypt(3)/ $ 2y $算法

时间:2014-05-08 12:59:22

标签: android algorithm encryption blowfish

我在应用程序中要求将一些加密数据发送到服务器。服务器端告诉我使用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来检查输出有效性。

1 个答案:

答案 0 :(得分:0)

crypt一起使用时,

CRYPT_BLOWFISH实际上是定义了基于密码的密码导出函数(PBKDF)。所以你应该使用兼容的兼容版本的bcrypt,例如: this one