快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
static String getPubExp() throws Exception {   return (new String(Base64.encode(pubExp.toByteArray()))); }

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

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

通过使用生成的私钥,实用程序类 RSASigUtil 可以从摘要获取一个字节数组 RSA 签名:

清单 15. 获取字节数组 RSA 签名

static public String getSignature (String mesg) throws Exception {   SHA1Digest digEng = new SHA1Digest();   RSAEngine rsaEng = new RSAEngine();   PSSSigner signer = new PSSSigner(rsaEng, digEng, 64);   signer.init(true, privKey);   byte [] sig = signer.generateSignature( mesg.getBytes() );   String result = new String( Base64.encode(sig) );   return result; }

服务器将摘要、签名和密钥参数编码成 ASCII 文本格式并以 XML 数字签名格式嵌入该文本:

清单 16. 编码并以数字签名格式嵌入

<SignedMesg>   <mesg>Hello World</mesg>   <Signature>    <SignedInfo>     <SignatureMethod Algorithm="rsa-sha1" />     <DigestValue>Ck1VqNd45QIvq3AZd8XYQLvEhtA=</DigestValue>    </SignedInfo>    <SignatureValue>     IhJ/UMitJX7sWbzhnG8UKIdDYiZ0mfOUoAwemGiG08C     WcQ3cUszgJXoIclHW/LN7w54w2FQyLStB+hPKASEC6r     OjjgTBs6pwhjHCh2XxWx7hS7fdi9/Qk/ybH6xYGaeaZ     3oHDBjFz3hEDtrvBYcHn3keCavncE22idRX7kBl8Do=    </SignatureValue>    <KeyInfo>     <KeyValue>      <RSAKeyValue>       <Modulus>        AKT1SyxSm4uT1zYWEPY9IaFY7vDhpkIM7FZeIQ        OGnKeSEE5d3sPfONkCiHfO2oe4x6jNCXg/ngRi        tmixBkjfKgHzF4trZZtNQZjfzAgcXGljzp9MD2        ZEWQbHKvMZvZyJVrT2SlxLzusxWLwXdacprIDG        bqDAmldBOBpkmrUdPpF9       </Modulus>       <Exponent>EQ==</Exponent>      </RSAKeyValue>     </KeyValue>    </KeyInfo>   </Signature> </SignedMesg>

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

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

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

清单 17. 验证签名

static public boolean verify (String mesg, String signature,                 String mod, String pubExp) {   BigInteger modulus = new BigInteger( Base64.decode(mod) );   BigInteger exponent = new BigInteger( Base64.decode(pubExp) );   SHA1Digest digEng = new SHA1Digest();   RSAEngine rsaEng = new RSAEngine();   RSAKeyParameters pubKey = new RSAKeyParameters(false, modulus, exponent);   PSSSigner signer = new PSSSigner(rsaEng, digEng, 64);   signer.init(false, pubKey);   boolean res = signer.verifySignature( mesg.getBytes(),                      Base64.decode(signature) );   return res; }

性能问题

我的测试说明了无线设备上的 XML 解析和摘要生成都非常快。正如预料的那样,主要的性能瓶颈是公钥算法的速度很慢。

Bouncy Castle Crypto 包提供几个使用 DSA、RSA 和 ECC 算法的签名引擎类来签署和验证消息。但在实际设备中,它们并不都是实用的。因为 Bouncy Castle Crypto 包完全基于Java 语言,所以它在没有特殊优化的

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