Java BouncyCastle上的ECDSA始终返回true
我有一个android程序,可以将ECDSA数据写入NFC标记并签名,还有一个程序可以读取数据并验证NFC标记的签名。Java BouncyCastle上的ECDSA始终返回true,java,android,digital-signature,elliptic-curve,Java,Android,Digital Signature,Elliptic Curve,我有一个android程序,可以将ECDSA数据写入NFC标记并签名,还有一个程序可以读取数据并验证NFC标记的签名。 我设法将数据写入NFC标记并签名,但每当我尝试验证签名时,程序总是返回true,即使我故意更改了签名。 有人能告诉我怎么了吗 以下是我用来签名的代码: public static String Generate(String x) throws Exception{ KeyPairGenerator kpg; kpg = KeyPairGenerator.get
我设法将数据写入NFC标记并签名,但每当我尝试验证签名时,程序总是返回
true
,即使我故意更改了签名。有人能告诉我怎么了吗 以下是我用来签名的代码:
public static String Generate(String x) throws Exception{
KeyPairGenerator kpg;
kpg = KeyPairGenerator.getInstance("EC","BC");
ECGenParameterSpec ecsp;
ecsp = new ECGenParameterSpec("prime192v1");
kpg.initialize(ecsp);
KeyPair kp = kpg.genKeyPair();
PrivateKey privKey = kp.getPrivate();
Signature ecdsaSign;
ecdsaSign = Signature.getInstance("SHA256withECDSA");
ecdsaSign.initSign(privKey);
byte[] baText = x.getBytes("UTF-8");
ecdsaSign.update(baText);
byte[] baSignature = ecdsaSign.sign();
String signature = (new BigInteger(1,baSignature).toString(16)).toUpperCase();
return signature;
}
下面是我用来验证的代码:
public static boolean Verify(String x) throws Exception{
KeyPairGenerator kpg;
kpg = KeyPairGenerator.getInstance("EC","BC");
ECGenParameterSpec ecsp;
ecsp = new ECGenParameterSpec("prime192v1");
kpg.initialize(ecsp);
KeyPair kp = kpg.genKeyPair();
PrivateKey privKey = kp.getPrivate();
PublicKey pubKey = kp.getPublic();
Signature ecdsaSign;
ecdsaSign = Signature.getInstance("SHA256withECDSA");
ecdsaSign.initSign(privKey);
byte[] baText = x.getBytes("UTF-8");
ecdsaSign.update(baText);
byte[] baSignature = ecdsaSign.sign();
Signature ecdsaVerify;
ecdsaVerify = Signature.getInstance("SHA256withECDSA");
ecdsaVerify.initVerify(pubKey);
ecdsaVerify.update(baText);
boolean result = ecdsaVerify.verify(baSignature);
return result;
}
您的验证方法实际上没有任何意义。它生成自己的密钥对,然后创建自己的签名,然后立即验证它。看起来你只是复制了一个例子,却没有试图去理解它。@GregS是的,我注意到我的代码确实有缺陷,我正在试图弄清楚我必须做些什么才能使它正常工作。我知道要验证签名,您需要公钥,但在验证android活动中,如何在签名android活动中使用公钥?