快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
+CuOfa53wvqjMl67tGxc8szgWWA6ZvRwVVVmJ6wqB        m5hNLr7q1X2eJKQ+u3XYpFflJktOjV8O3zeEPOtsTQ=       </G>       <P>        AOAu2WqVEKGTF8Zcxgde4vxc8f/Z+hk8A10M0AtY2lU        8CX54dz2MuD6hOmhqGXJxIVlV9085d9D0yHcMv2wl9V        Vt0/ww+aqFukCKZj9fHgZzq26nOBXMqibDo67J2vfQw        EZMvCnyBXdS665whjzl5i7ubXu2Su+AqsodnvG9pyYB       </P>       <Q>AMjJUZy1RnQRqe/22BS83k2Hk8VR</Q>       <Y>        AM/9leouAW7nyON24xeqibMUpVOW8RyzcdNjp9NiPdfm        HT42BvB4JL/cXx0tCbyHtcR5G+vALoOo7Mh3JJ+/gjx7        sS8uHNngqx6O6dADrc9VdPvyllNDR0szLja1RTRCIy9M        8p0dKe/U8iotAj2zctjfbrroMu/fTOBhkvb2gVvR      </Y>      </DSAKeyValue>     </KeyValue>    </KeyInfo>   </Signature> </SignedMesg>

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

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

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

清单 6. 验证签名

static public boolean verify (String digest,                 String sig_r, String sig_s,                 String key_g, String key_p,                 String key_q, String key_y ) {   BigInteger g = new BigInteger( Base64.decode(key_g) );   BigInteger p = new BigInteger( Base64.decode(key_p) );   BigInteger q = new BigInteger( Base64.decode(key_q) );   BigInteger y = new BigInteger( Base64.decode(key_y) );   BigInteger r = new BigInteger( Base64.decode(sig_r) );   BigInteger s = new BigInteger( Base64.decode(sig_s) );   DSAParameters DSAPara = new DSAParameters(p, q, g);   DSAPublicKeyParameters DSAPubKeyPara = new DSAPublicKeyParameters(y,                        DSAPara);   // Verify   DSASigner signer = new DSASigner();   signer.init( false, DSAPubKeyPara );   boolean result = signer.verifySignature( digest.getBytes(), r, s );   return result; }

椭圆曲线 DSA 签名示例

在 ECDSASigUtil 类中,首先定义您计划使用的椭圆曲线模型,如清单 7 所示:

清单 7. 定义椭圆曲线模型

 private static BigInteger q = new BigInteger("6277101735386680763835789423207666416083908700390324961279");   private static BigInteger a = new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16);   private static BigInteger b = new BigInteger("64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", 16);   private static BigInteger n = new BigInteger("6277101735386680763835789423176059013767194773182842284081");   private static byte [] G = Hex.decode("03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012");

ECDSASigUtil.generateKeys() 方法使用清单 7 中的模型生成随机的密钥对。正如前面提到的那样,这个步骤通常由中央认证中心在脱机状态下完成。

清单 8. 使用清单 7 中的模型生成随机的密钥对

// Get a secure random source. SecureRandom sr = new SecureRandom(); ECCurve.Fp curve = new ECCurve.Fp(q, a, b); ECDomainParameters ECDomPara = new ECDom

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号