快速业务通道

保护您的J2ME/MIDP应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
DII/x1XTq84fLm4eGN2fED1PYc=</QQ>       <Q>AP////////////////////7//////////w==</Q>       <A>AP////////////////////7//////////A==</A>       <B>ZCEFGeWcgOcPp+mrciQwSf643uzBRrmx</B>       <N>AP///////////////5ne+DYUa8mxtNIoMQ==</N>       <G>AxiNqA6wMJD2fL8g60OhiAD0/wr9gv8QEg==</G>      </ECKeyValue>     </KeyValue>    </KeyInfo>   </Signature> </SignedMesg>

保护您的J2ME/MIDP应用程序(7)

时间:2011-01-07 IBM Michael Juntao Yuan

验证 MIDP 应用程序从 XML 文档解析出摘要、密钥参数和签名,重新构造公钥并使用清单 12 中显示的方法来验证签名:

清单 12. 验证签名

static public boolean verify (String digest,                 String sig_r, String sig_s,                 String key_q, String key_a,                 String key_b, String key_n,                 String key_G, String key_Q ) {   BigInteger q = new BigInteger( Base64.decode(key_q) );   BigInteger a = new BigInteger( Base64.decode(key_a) );   BigInteger b = new BigInteger( Base64.decode(key_b) );   BigInteger n = new BigInteger( Base64.decode(key_n) );   byte [] G = Base64.decode(key_G);   byte [] Q = Base64.decode(key_Q);   BigInteger r = new BigInteger( Base64.decode(sig_r) );   BigInteger s = new BigInteger( Base64.decode(sig_s) );   ECCurve.Fp curve = new ECCurve.Fp(q, a, b);   ECDomainParameters ECDomPara = new ECDomainParameters(          curve, curve.decodePoint(G), n );   ECPublicKeyParameters pubKey = new ECPublicKeyParameters(          curve.decodePoint(Q), ECDomPara );   // Verify   ECDSASigner signer = new ECDSASigner();   signer.init( false, pubKey );   boolean result = signer.verifySignature( digest.getBytes(), r, s );   return result; }

RSA 签名示例

RSA 算法只有一个模型参数 Exponent :

private static BigInteger pubExp = new BigInteger("11", 16);

RSASigUtil.generateKeys() 方法使用 Exponent 生成随机的密钥对。同样,这个步骤通常由中央认证中心在脱机状态下完成。

清单 13. 生成随机的密钥对

SecureRandom sr = new SecureRandom(); RSAKeyGenerationParameters RSAKeyGenPara =     new RSAKeyGenerationParameters(pubExp, sr, 1024, 80); RSAKeyPairGenerator RSAKeyPairGen = new RSAKeyPairGenerator(); RSAKeyPairGen.init(RSAKeyGenPara); AsymmetricCipherKeyPair keyPair = RSAKeyPairGen.generateKeyPair(); privKey = (RSAPrivateCrtKeyParameters) keyPair.getPrivate(); pubKey = (RSAKeyParameters) keyPair.getPublic();

公钥以参数 Modulus 来描述,并且用 pubKey.getModulus() 方法来检索它。清单 14 显示了 RSAUtil 类中的方法。这些方法检索 Exponent 和 Modulus 、模型以及密钥参数,它们是重新构造公钥对象所必需的。

清单 14. 用于检索模型和密钥参数的 RSAUtil 方法

// Public key specific parameter. public static String getMod() throws Exception {   return (new String(Base64.encode(pubKey.getModulus().toByteArray()))); } // General key parameter. pubExp is the same as pubKey.getExponent() public

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号