Tag: 数字签名

使用对称密钥(AES -128)签名并validation消息

我想知道可以使用对称密钥来签名消息吗? 我们可以使用共享密钥加密。 此外,当对称密钥用于签名时,可以在JAVA中使用哪些API来加载密钥并对消息进行签名? 如果我使用java.security中的Signature,它有一个api initSign,但它从公钥/私钥对中取私钥作为签名消息的参数。 这里的关键是对称密钥。 有什么指针吗?

ECDSA算法教程对字符串进行签名

你能帮我找一个简单的教程,讲解如何在java中使用ECDSA算法对字符串进行签名。 但是没有使用任何像bouncycastle这样的第三方库。 只是JDK 7.我发现很难搜索一个简单的例子,我是密码学的新手。 import java.io.*; import java.security.*; public class GenSig { /** * @param args the command line arguments */ public static void main(String[] args) { /* * Generate a DSA signature */ try { /* * Generate a key pair */ KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“DSA”, “SUN”); SecureRandom random = SecureRandom.getInstance(“SHA1PRNG”, “SUN”); keyGen.initialize(1024, random); […]

使用SunMSCAPI签署文档并禁止“输入PIN”对话框

我正在开发一个使用证书令牌签署文档的java代码。 到目前为止,一切都很好,但我想抑制“输入引脚”对话框,因为我存储用户的引脚,所以他/她不需要每次都输入它。 这里的真正问题是此代码将以批处理模式运行(无用户交互)。 我知道一旦键入,键可能在内存中,因此不需要在短时间内再次键入。 但我不能依赖它,我需要提供PIN。 这是我到目前为止的代码(它只是一个样本,它可能不完整也不起作用): protected KeyStore loadKeyStoreFromSmartCard() { keyStore = KeyStore.getInstance(“Windows-MY”, “SunMSCAPI”); keyStore.load(null, null); return keyStore; } public void signDocument(byte[] conteudoParaAssinar, String certAlias) { char[] pass = (char[]) null; PrivateKey key = (PrivateKey) loadKeyStoreFromSmartCard.getKey(certAlias, pass); Certificate[] chain = loadKeyStoreFromSmartCard(true).getCertificateChain(certAlias); CertStore certsAndCRLs = CertStore.getInstance(“Collection”, new CollectionCertStoreParameters(Arrays.asList(chain)), “BC”); X509Certificate cert = (X509Certificate) chain[0]; CMSSignedDataGenerator gen […]

如何使用iText对pdf进行数字签名?

如何使用iText签署pdf? 我正在浏览这个LINK但却不了解my_private_key.pfx。 我真的需要数字签名证书吗? 请澄清我。 提前致谢。

如何validation签名的jar是否包含时间戳?

签名jar并使用-tsa选项后,如何validation时间戳是否包含在内? 我试过了: jarsigner -verify -verbose -certs myApp.jar 但输出没有指定时间戳的任何内容。 我问,因为即使我在-tsa URL路径中有拼写错误,jarsigner也会成功。 这是GlobalSign TSA URL: http : //timestamp.globalsign.com/scripts/timstamp.dll ,它背后的服务器显然接受任何路径(即timestamp.globalsign.com/foobar),所以最后我是不确定我的jar子是否加盖时间戳。

用BCvalidation分离的签名

如何使用Java中的BouncyCastle提供程序validation分离的签名(CMS / pkcs#7签名)? 目前,我的代码抛出exception,消息message-digest attribute value does not match calculated value Security.addProvider(new BouncyCastleProvider()); File f = new File(filename); byte[] buffer = new byte[(int)f.length()]; DataInputStream in = new DataInputStream(new FileInputStream(f)); in.readFully(buffer); in.close(); CMSSignedData signature = new CMSSignedData(buffer); SignerInformation signer = (SignerInformation) signature.getSignerInfos().getSigners().iterator().next(); CertStore cs = signature.getCertificatesAndCRLs(“Collection”, “BC”); Iterator iter = cs.getCertificates(signer.getSID()).iterator(); X509Certificate certificate = (X509Certificate) iter.next(); […]

使用BouncyCastle将签名/身份validation的属性添加到CMS签名

我想使用bouncycastle生成一个简单的CMS签名。 这段代码有效! Security.addProvider(new BouncyCastleProvider()); String password = “123456”; KeyStore ks = KeyStore.getInstance(“PKCS12”); ks.load(new FileInputStream(“c:/cert_123456.p12”), password.toCharArray()); String alias = (String)ks.aliases().nextElement(); PrivateKey key = (PrivateKey)ks.getKey(alias, password.toCharArray()); Certificate[] chain = ks.getCertificateChain(alias); CMSSignedDataGenerator generator = new CMSSignedDataGenerator(); generator.addSigner(key, (X509Certificate)chain[0], CMSSignedDataGenerator.DIGEST_SHA1); ArrayList list = new ArrayList(); for (int i = 0; i < chain.length; i++) { list.add(chain[i]); } CertStore chainStore […]

如何从我们创建的密钥库中检索我的公钥和私钥

我的任务如下: 从我创建的密钥库中检索我的公钥和私钥。 使用这些密钥使用我的RSA 2048位公钥加密段落。 使用DSA-SHA-1签名算法对结果进行数字签名。 将数字签名输出保存在名为output.dat的文件中。 下面的程序抛出错误:“java.security.InvalidKeyException:没有安装的提供程序支持此密钥:sun.security.provider.DSAPublicKeyImpl”。 import java.security.*; import java.security.KeyStore.*; import java.io.*; import java.security.PublicKey; import java.security.PrivateKey; import javax.crypto.Cipher; import java.nio.charset.*; import sun.security.provider.*; import javax.crypto.*; public class Code { /** * @param args the command line arguments */ public static void main(String[] args) { try { /* getting data for keystore */ File file = […]

如何签署自定义JCE安全提供程序

Sun的PKCS11 JCE安全提供程序缺少我们需要的一些function。 所以我使用原始资源编写了一个增强版本。 不幸的是,JCE基础设施拒绝新的提供商 “JCE无法validation提供商” 因为没有正确签名。 javax.crypto.JceSecurity.verifyProviderJar(…)抛出。 (它调用javax.crypto.JarVerifier.verify() ) 有关如何签署新提供商以使其与JCE一起使用的任何建议?

在Java中加载原始的64字节长ECDSA公钥

我有一个原始(r,s)格式的ECDSA NIST P-256公钥。 似乎没有简单的方法将它加载到实现java.security.interfaces.ECPublicKey的对象中。 加载64字节公钥的最简洁方法是什么,以便可以用来检查签名?