我正在尝试创建一个 android 应用程序,它可以使用我通过的私钥签署一个字符串,并且 100% 使用 vb 和 php 我真的很困惑,并尝试了一切来解决这个问题!!!
我对加密有点陌生,并希望获得任何可能的帮助
signkey = 密钥
尝试:使用密钥对字节进行签名并使用 base64 将其发送回服务器...
密钥没问题,看起来像 php 密钥,但如果我使用另一个测试密钥,它可以正常工作,但我需要那个! !
代码 VB:
Dim textReader As TextReader = New StringReader(tmp_key)
Dim pemReader As PemReader = New PemReader(textReader)
Dim _keyPair As AsymmetricCipherKeyPair = pemReader.ReadObject()
Dim _privateKeyParams As ECPrivateKeyParameters = _keyPair.Private
Dim _publicKeyParams As ECPublicKeyParameters = _keyPair.Public
Dim signer As ISigner = SignerUtilities.GetSigner("SHA-256withECDSA")
signer.Init(True, _keyPair.Private)
Dim bytes As Byte() = System.Text.Encoding.UTF8.GetBytes(info)
signer.BlockUpdate(bytes, 0, bytes.Length)
Dim signature As Byte() = signer.GenerateSignature()
重新编码Java:
try{
System.out.println("UNSIGNED: "+done);
Security.addProvider(new BouncyCastleProvider());
signkey = "-----BEGIN EC PRIVATE KEY-----\n"+
"MIIBCwIBAQQgJ6TxAzr3IXM5u5M16+smwl/oDSpe3ycrWv7MgPfUyvqggeMwgeAC\n" +
"AQEwLAYHKoZIzj0BAQIhAP////////////////////////////////////7///wv\n" +
"MEQEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAAAAAAAAAAA\n" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAABwRBBHm+Zn753LusVaBilc6HCwcCm/zbLc4o\n" +
"2VnygVsW+BeYSDradyajxGVdpPv8DhEIqP0XtEimhVQZnEfQj/sQ1LgCIQD/////\n" +
"///////////////+uq7c5q9IoDu/0l6M0DZBQQIBAQ==\n"+"-----END EC PRIVATE KEY-----\n";
Reader rdr = new StringReader (signkey);
System.out.println(rdr);
Object parsed = new PEMParser(rdr).readObject();
KeyPair pair = new JcaPEMKeyConverter().getKeyPair((PEMKeyPair)parsed);
System.out.println ("ALGORITHM:"+pair.getPrivate().getAlgorithm());
PrivateKey key = pair.getPrivate();
Signature sig = Signature.getInstance("SHA256withECDSA");
sig.initSign(key);
sig.update(done.getBytes());
byte[] signatureBytes = sig.sign();
System.out.println("SIGNED: "+encode(signatureBytes));
return encode(signatureBytes);
}catch (Exception e)
{
e.printStackTrace();
}
错误:
org.spongycastle.openssl.PEMException: problem creating EC private key: java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] org.spongycastle.asn1.DERBitString.getBytes()' on a null object reference
at org.spongycastle.openssl.PEMParser$KeyPairParser.parseObject(PEMParser.java:164)
at org.spongycastle.openssl.PEMParser.readObject(PEMParser.java:92)
at arionum.net.cubedpixels.utils.Base58.getSignature(Base58.java:201)
at arionum.net.cubedpixels.views.HomeView$12$1.onClick(HomeView.java:471)
at com.afollestad.materialdialogs.MaterialDialog.onClick(MaterialDialog.java:410)
at android.view.View.performClick(View.java:6199)
at android.widget.TextView.performClick(TextView.java:11090)
at android.view.View$PerformClick.run(View.java:23647)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: org.spongycastle.openssl.PEMException: problem creating EC private key: java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] org.spongycastle.asn1.DERBitString.getBytes()' on a null object reference
at org.spongycastle.openssl.PEMParser$ECDSAKeyPairParser.parse(PEMParser.java:243)
at org.spongycastle.openssl.PEMParser$KeyPairParser.parseObject(PEMParser.java:154)
... 14 more
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] org.spongycastle.asn1.DERBitString.getBytes()' on a null object reference
at org.spongycastle.openssl.PEMParser$ECDSAKeyPairParser.parse(PEMParser.java:232)
... 15 more