快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
名引擎并提出今后的改进建议。

DSA 签名示例

方法 DSASigUtil.generateKeys() 生成密钥对。正如我讨论过的那样,这个步骤通常由中央认证中心在脱机状态下完成,如清单 2 所示:

清单 2. 生成密钥对

// Get a secure random source. SecureRandom sr = new SecureRandom(); // Generate DSA parameters. DSAParametersGenerator DSAParaGen = new DSAParametersGenerator(); DSAParaGen.init(1024, 80, sr); DSAPara = DSAParaGen.generateParameters(); // Get DSA key generation parameters. DSAKeyGenerationParameters DSAKeyGenPara =       new DSAKeyGenerationParameters(sr, DSAPara); // Generate keys. DSAKeyPairGenerator DSAKeyPairGen = new DSAKeyPairGenerator(); DSAKeyPairGen.init( DSAKeyGenPara ); AsymmetricCipherKeyPair keyPair = DSAKeyPairGen.generateKeyPair(); privKey = (DSAPrivateKeyParameters) keyPair.getPrivate(); pubKey = (DSAPublicKeyParameters) keyPair.getPublic();

生成的公钥以参数 Y 来描述,并且用 pubKey.getY() 方法来检索它。参数 G 、 P 和 Q 描述模型。类 DSAUtil 中的下列方法检索模型和密钥参数,它们是重新构造公钥对象所必需的:

清单 3. 检索模型和密钥参数

public static String getG() throws Exception {   return (new String(Base64.encode(DSAPara.getG().toByteArray()))); } public static String getP() throws Exception {   return (new String(Base64.encode(DSAPara.getP().toByteArray()))); } public static String getQ() throws Exception {   return (new String(Base64.encode(DSAPara.getQ().toByteArray()))); } public static String getY() throws Exception {   return (new String(Base64.encode(pubKey.getY().toByteArray()))); }

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

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

通过使用生成的私钥,实用程序类 DSASigUtil 可以从摘要获取两部分 DSA 签名 R 和 S :

清单 4. 检索 DSA 签名

static public String [] getSignature (String digest) throws Exception {   // Sign   DSASigner signer = new DSASigner();   signer.init( true, privKey );   BigInteger [] sigArray = signer.generateSignature( digest.getBytes());   String [] result = new String [2];   // Signature R   result[0] = new String(Base64.encode(sigArray[0].toByteArray()));   // Signature S   result[1] = new String(Base64.encode(sigArray[1].toByteArray()));   return result; }

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

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

<SignedMesg>   <mesg>Hello World</mesg>   <Signature>    <SignedInfo>     <SignatureMethod      Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1" />     <DigestValue>Ck1VqNd45QIvq3AZd8XYQLvEhtA=</DigestValue>    </SignedInfo>    <SignatureValue>     <R>AMfVKyIUyPGdeUCtJxU+N9kQJc2x</R>     <S>RwGahqpopPx//bMYXzH8dtY0lhA=</S>    </SignatureValue>    <KeyInfo>     <KeyValue>      <DSAKeyValue>       <G>        FgLTXVdxKAmDQtQHkDdFF5zthKSpQhUCzRgXxz7yzxM        OLYrRoj5D8AXdGLS+5CzT4gu55MbO62dBfyEWKbWTIO        6E

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