gpt4 book ai didi

android - 使用私钥、RSA-SHA1 签名和 Android 中的 md5 签名字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:28 24 4
gpt4 key购买 nike

我需要使用 RSA-SHA1 签名和来自 .PFX 证书的私钥来签署一个字符串。这是我的代码:

String rawString = "1234567890";

byte[] signed = null;

FileInputStream cert = new FileInputStream("/sdcard/cert.pfx");

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(cert, "cert_password".toCharArray());

String alias = keyStore.aliases().nextElement();
PrivateKey privateKey = (PrivateKey)keyStore.getKey(alias, "cert_password".toCharArray());

Signature instance = Signature.getInstance("SHA1withRSA");
instance.initSign((PrivateKey)privateKey);
instance.update(rawString.getBytes());
signed = instance.sign();

TextView mTextView = (TextView) findViewById(R.id.signed_message);
mTextView.setText(md5(bytes2String(signed)));

我确实得到了一个漂亮的 MD5,但是,我也在 PHP 中做同样的事情,我用 PHP 得到的结果与在 Android 中得到的结果不同。我知道 PHP 版本是正确的...那么 Android 版本有什么问题吗?

我注意到,如果我使用 new String(signed) 而不是 bytes2String(signed) 或者即使我使用 signed,Android 结果也会不同。 toString()

我将其用于 MD5:https://stackoverflow.com/a/4846511/1176497

和来自 ( Using SHA1 and RSA with java.security.Signature vs. MessageDigest and Cipher ) 的 bytes2String:

private static String bytes2String(byte[] bytes) {
StringBuilder string = new StringBuilder();
for (byte b : bytes) {
String hexString = Integer.toHexString(0x00FF & b);
string.append(hexString.length() == 1 ? "0" + hexString : hexString);
}
return string.toString();
}

最佳答案

我想通了......

我正在使用的 md5 函数需要一个字符串,但将其转换为 byte[]...因为我已经有了 byte[],所以没有必要转换它!

现在我得到了与在 PHP 中相同的结果:)

关于android - 使用私钥、RSA-SHA1 签名和 Android 中的 md5 签名字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17024984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com