我想通过以下方式在XML文件上进行数字签名
>
使用SHA-256进行单向散列
规范化方法算法="http://www.w3.org/2001/10/xmlexcc14n#"
我遵循了这里提到的签名api!
但我得到以下错误
com。太阳组织。阿帕奇。xml。内部的安全UTIL。分解器。ResourceResolvexException:无法解析ID为object的元素
我已经尝试了元素。“ID”的setIdAttributeNode以及setIdAttributeNS,但没有帮助
下面一行是引发错误的地方
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware ( false );
Document doc = dbFactory.newDocumentBuilder().parse(new FileInputStream(filePath));
String providerName = System.getProperty("jsr105Provider", "org.jcp.xml.dsig.internal.dom.XMLDSigRI");
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", (Provider) Class.forName(providerName).newInstance());
// Next, create a Reference to a same-document URI that is an Object element and specify the SHA256 digest algorithm
DigestMethod digestMethod = fac.newDigestMethod(DigestMethod.SHA256, null);
Reference reference = fac.newReference("#CBC",digestMethod);
SignatureMethod signatureMethod = fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", null);
CanonicalizationMethod canonicalizationMethod = fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS, (C14NMethodParameterSpec) null);
// Create the SignedInfo
SignedInfo si = fac.newSignedInfo(canonicalizationMethod, signatureMethod, Collections.singletonList(reference));
// Create a RSA KeyPair
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.generateKeyPair();
// Create a KeyValue containing the RSA PublicKey that was generated
KeyInfoFactory kif = fac.getKeyInfoFactory();
KeyValue kv = kif.newKeyValue(kp.getPublic());
// Create a KeyInfo and add the KeyValue to it
KeyInfo ki = kif.newKeyInfo(Collections.singletonList(kv));
DOMSignContext dsc = new DOMSignContext(kp.getPrivate(), doc);
//dsc.setDefaultNamespacePrefix("dsig");
// Create the XMLSignature and sign it
XMLSignature signature = fac.newXMLSignature(si, ki,Collections.singletonList(obj), null, null);
signature.sign(dsc);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans = tf.newTransformer();
错误发生在下一行
signature.sign(dsc)
我添加了以下两行,解决了问题。
XMLStructure content = new DOMStructure(doc.getDocumentElement());
XMLObject obj = fac.newXMLObject(Collections.singletonList(content), "CBC", null, null);
问题内容: 我有一个正在下载xml并将其解析为sql数据库的应用程序。我的问题是,一旦部署了应用程序,xml中的数据就很容易被抓取,其他人可能将我辛苦赚来的数据用于自己的邪恶目的/应用程序。基本上我需要使用php加密xml,然后使用android解密。我已经看过几个php类,它们可以很容易地加密,但是我不完全确定哪种加密方法与android兼容。 解决后编辑: 起初,我认为出于某种原因我不得不忽略
本文向大家介绍Python解析xml中dom元素的方法,包括了Python解析xml中dom元素的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python解析xml中dom元素的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。
我使用EclipseMars(M1)作为我的IDE。今天,我使用Apache Thrift 0.9.2(最新稳定版本)为Android项目生成了我的服务的Java代码。这个版本(unlke版本0.9.1)使用来自javax的“生成”注释。注释包,用于添加一些可提取的文档。它在每个生成的类之前添加一行,如下所示: @已生成(value=“节俭编译器自动生成(0.9.2)”,日期=“2014-11-3
两天前,我犯了以下错误: 执行任务:[: app: assembleDebug] 配置项目:app registerResGeneratingTask已弃用,请使用registerGeneratedResFolders(FileCollection) 任务:app:buildInfoDebugLoader任务:app:preBuild-UP-DATE任务:core:preDebugBuild-up
我得到的错误是:无法将java.lang.String实例反序列化出START_OBJECT令牌 如何将xml元素反序列化更正为基元类型?