java - Signing data in Android and Verifying it in python -
i have written following code sign data in android:
import java.security.keyfactory; import java.security.keypair; import java.security.keypairgenerator; import java.security.privatekey; import java.security.publickey; import java.security.signature; import java.security.spec.rsapublickeyspec; import android.app.activity; import android.os.bundle; public class testactivity extends activity { /** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); try{ string m ="this message"; system.out.println(m); keypairgenerator keypairgen = keypairgenerator.getinstance("rsa"); keypairgen.initialize(1024); keypair kp = keypairgen.generatekeypair(); privatekey prikey = kp.getprivate(); publickey pubkey = kp.getpublic(); keyfactory keyfactory = keyfactory.getinstance("rsa"); rsapublickeyspec publickeyspec = keyfactory.getkeyspec(pubkey, rsapublickeyspec.class); system.out.println("with tostring: "); system.out.println("mod :" + publickeyspec.getmodulus().tostring()); system.out.println("exp :" + publickeyspec.getpublicexponent().tostring()); system.out.println("publickey:" + pubkey.tostring()); system.out.println("publickey:" + pubkey); system.out.println("publickey base64:" +mybase64.encode(pubkey.getencoded())); signature instance = signature.getinstance("sha1withrsa"); instance.initsign(prikey); instance.update(m.getbytes()); byte[] signature = instance.sign(); system.out.println("signature: " + mybase64.encode(signature)); }catch(exception e){ e.printstacktrace(); } } }
i copy pasting values adb logcat python , verifying in python using:
mod=#i paste mod here exp=#i paste exp here signature=#i paste signature here message="this message" publickey = rsa.construct((mod,exp)) print 'publickey base64: ' + publickey.exportkey() print str(publickey) test = sha.new(message) verifier = pkcs1_v1_5.new(publickey) signature_base = base64.b64decode(signature) print "verification: " + str(verifier.verify(test, signature_base))
i find mybase64.encode(pubkey.getencoded()) (in java) same publickey.exportkey() (in python)
however, verification results false.
the java code seems work fine , if run using javac .
any help, may going wrong?
often error has whitespace sneaking data string. try stripping before computing hashes.
Comments
Post a Comment