标签: digital-signature

BouncyCastle 签名创建 java.lang.NoSuchFieldError: xmss_SHA256ph

我正在尝试创建如下所示的签名,但收到此错误:

java.lang.NoSuchFieldError: xmss_SHA256ph
Run Code Online (Sandbox Code Playgroud)

我正在使用 bcprov-jdk15on 和 bcpkix-jdk15on 版本 1.64 和 Java 8。我尝试了各种签名算法,最新的是 SHA1WITHRSA。我还尝试过 SHA256WITHRSA 和 SHA256withECDSA。

你知道我为什么会收到这个错误吗?谢谢。

CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
ContentSigner sha1Signer = new JcaContentSignerBuilder(getSignatureAlgorithm()).build(key);
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(new 
JcaDigestCalculatorProviderBuilder().build()).build(sha1Signer, cert));
gen.addCertificates(new JcaCertStore(chain));
CMSTypedDataInputStream msg = new CMSTypedDataInputStream(content);
CMSSignedData signedData = gen.generate(msg, false);
signatureBytes = signedData.getEncoded();
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

java.lang.NoSuchFieldError: xmss_SHA256ph
at org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder.<clinit>(Unknown Source) ~[bcpkix-jdk15on-1.64.jar:1.64.00.0]
at org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.<init>(Unknown Source) ~[bcpkix-jdk15on-1.64.jar:1.64.00.0]
at com.trovare.document.pki.Signer.sign(Signer.java:162) ~[classes/:na]
at org.apache.pdfbox.pdfwriter.COSWriter.doWriteSignature(COSWriter.java:744) ~[pdfbox-2.0.19.jar:2.0.19]
at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1150) ~[pdfbox-2.0.19.jar:2.0.19]
at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:452) ~[pdfbox-2.0.19.jar:2.0.19]
at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1386) ~[pdfbox-2.0.19.jar:2.0.19]
at org.apache.pdfbox.pdmodel.PDDocument.saveIncremental(PDDocument.java:1392) ~[pdfbox-2.0.19.jar:2.0.19]
at com.trovare.document.pdf.PdfDcoumentSigner.sign(PdfDcoumentSigner.java:167) ~[classes/:na]
at com.trovare.document.DocumentEncryptorApplication.run(DocumentEncryptorApplication.java:62) …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle pki digital-signature

5
推荐指数
1
解决办法
5082
查看次数

使用 ECDSA 和 SHA256 证书进行 C# 签名验证

我正在尝试使用 C# 和内置加密库来验证使用 EC 密钥 + SHA256 创建的签名。这就是我正在做的事情。

我使用 openssl 创建了私钥和相应的证书:

$ openssl ecparam -genkey -name prime256v1 -out ca.key
$ openssl req -x509 -new -SHA256 -nodes -key ca.key -days 36500 -out ca.crt
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的键(不用担心,它们并不重要):

$ cat ca.key 
-----BEGIN EC PARAMETERS-----
BggqhkjOPQMBBw==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIHd3OvRV1nEnoDxGzzemX1x8l2rHasWH3L/LflUGg5vloAoGCCqGSM49
AwEHoUQDQgAE7f1xwQL5m/UcN4zL+zsly6V1g3/wNcL5TdCfWt0XfnUfg0x+RsIf
1uerBnhrmhH0cN9o0xfXg5B3hURFlXVuEQ==
-----END EC PRIVATE KEY-----

$ cat ca.crt 
-----BEGIN CERTIFICATE-----
MIIB4TCCAYegAwIBAgIUKt0WdaKI2eRXBO2nVk+OF6AZqHMwCgYIKoZIzj0EAwIw
RTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGElu
dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAgFw0yMDA1MDcxMzM2MTNaGA8yMTIwMDQx
MzEzMzYxM1owRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAf
BgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDBZMBMGByqGSM49AgEGCCqG
SM49AwEHA0IABO39ccEC+Zv1HDeMy/s7JculdYN/8DXC+U3Qn1rdF351H4NMfkbC
H9bnqwZ4a5oR9HDfaNMX14OQd4VERZV1bhGjUzBRMB0GA1UdDgQWBBRGuUmsyB2h
JCXMRTVMRTcdoWZQaDAfBgNVHSMEGDAWgBRGuUmsyB2hJCXMRTVMRTcdoWZQaDAP
BgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMCA0gAMEUCIGG8tQZlh7aJaI34Y7jq
44SmSc/ule9MgjIX+Gg+i5vwAiEA9Jb/304KO4t9OMqFMQeWZXIHdzhDFBwx7FWz
78+UsnY=
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

然后我有一个包含字符串“Hello”的简单数据文件。然后我使用 openssl 对该文件进行签名,如下所示:

$ openssl dgst -sha256 -sign …
Run Code Online (Sandbox Code Playgroud)

c# cryptography digital-signature x509certificate2 ecdsa

5
推荐指数
1
解决办法
3983
查看次数

使用Python验证Metamask签名(以太坊)

我想使用python验证在 MetaMask 中制作的以太坊(ETH)签名。我正在开发一个使用 Flask 作为后端的网站。Javascript 代码向后端发送 POST 请求,其中包含以下 3 个变量:

{'signature': '0x0293cc0d4eb416ca95349b7e63dc9d1c9a7aab4865b5cd6d6f2c36fb1dce12d34a05039aedf0bc64931a439def451bcf313abbcc72e9172f7fd51ecca30b41dd1b', 'nonce': '6875972781', 'adress': '0x3a806c439805d6e0fdd88a4c98682f86a7111789'}
Run Code Online (Sandbox Code Playgroud)

我的目标是验证签名是否包含随机数(随机整数)并且是由公共地址签名的

我使用 javascript 使用以太库来签署随机数

const ethereum = window.ethereum;
const provider = new ethers.providers.Web3Provider(ethereum)
const signer = provider.getSigner()
var signature = await signer.signMessage(nonce);
Run Code Online (Sandbox Code Playgroud)

我尝试了几个 python libraires,但我无法格式化签名、地址和随机数以使其正常工作。这是使用 ECDSA 库进行的不成功尝试:

vk = ecdsa.VerifyingKey.from_string(bytes.fromhex(address), curve=ecdsa.SECP256k1, hashfunc=sha256) 
vk.verify(bytes.fromhex(hex(signature)), bytes(nonce, 'utf-8'))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ValueError: non-hexadecimal number found in fromhex() arg at position 1
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助 !

python digital-signature ecdsa ethereum metamask

5
推荐指数
1
解决办法
5491
查看次数

Java(java.security)中的签名是否存在大小限制?

我正在尝试使用SHA1签署令牌对象.我使用bouncycastle作为安全提供者.每当程序试图签署某些东西时,它就会给我这个错误.

java.security.SignatureException: java.lang.IllegalArgumentException: input data too large.
Run Code Online (Sandbox Code Playgroud)

签名的最大尺寸是多少?你对我如何签署这个对象有什么建议吗?

java security sha1 digital-signature

4
推荐指数
1
解决办法
3270
查看次数

非对称数字签名Node.JS

我需要找到一些伪造的解决方案,它允许我使用私钥签署一些数据,并使用公钥检查签名.如果有一些nodejs包会很棒.

谢谢!

cryptography digital-signature node.js

4
推荐指数
1
解决办法
3852
查看次数

BouncyCastle没有找到它提供的算法?

我正在玩BouncyCastle 1.46令我惊讶的是,下面片段中的陷阱经常被绊倒.

Security.addProvider(new BouncyCastleProvider());

final Set<String> found = new HashSet<String>();
final Set<String> missing = new HashSet<String>();

final DefaultSignatureAlgorithmIdentifierFinder finder = new DefaultSignatureAlgorithmIdentifierFinder();
for (Service service : new BouncyCastleProvider().getServices()) {
    if ("Signature".equals(service.getType())) {
        final String algorithm = service.getAlgorithm();
        try {
            finder.find(algorithm);
            found.add(algorithm);
        } catch (IllegalArgumentException ex) {
            missing.add(algorithm);
        }
    }
}

System.out.println("Found: " + found);
System.out.println("Missing: " + missing);
Run Code Online (Sandbox Code Playgroud)

我似乎无法通过Finder使用大多数算法,即使存在提供这些算法的服务.我究竟做错了什么?

更新我稍微更改了代码以更好地说明问题.可能感兴趣的是我使用的是BouncyCastle的JDK1.5版本.上面的代码给出了这个输出:

实测值:[RIPEMD256WithRSAEncryption,MD5WithRSAEncryption,MD2WithRSAEncryption,SHA384WithRSAEncryption,SHA224WITHECDSA,SHA384WITHDSA,SHA256WITHDSA,SHA512WithRSAEncryption,SHA512WITHDSA,RIPEMD160WithRSAEncryption,SHA224WithRSAEncryption,SHA256WITHECDSA,RIPEMD128WithRSAEncryption,SHA384WITHECDSA,SHA256WithRSAEncryption,SHA512WITHECDSA,SHA1WithRSAEncryption,SHA224WITHDSA]

缺失:[SHA1WITHECNR,NONEwithECDSA,ECDSA,SHA512withRSA/PSS,RIPEMD160WITHECDSA,RSA,GOST3410,SHA256WITHECNR,MD5withRSA/ISO9796-2,SHA1WITHCVC-ECDSA,SHA384withRSA/PSS,SHA1withRSA/PSS,MD4WithRSAEncryption,RSASSA-PSS,SHA512WITHECNR,SHA256WITHCVC-ECDSA ,SHA1withRSA/ISO9796-2,SHA224withRSA/PSS,SHA224WITHCVC-ECDSA,RAWRSASSA-PSS,SHA256withRSA/PSS,NONEWITHDSA,SHA384WITHECNR,RIPEMD160withRSA/ISO9796-2,DSA,ECGOST3410,SHA224WITHECNR,1.2.840.113549.1.1.10]

java security bouncycastle digital-signature

4
推荐指数
1
解决办法
9791
查看次数

如何在PHP中对文件进行数字签名

我在我的数据库中创建了一个用户表,其中包含用于保存用户信息的不同列.我还添加了两列public_keyprivate_key.当用户注册时,他的信息将被插入到表中.加上我正在使用:

// Create the keypair
$res=openssl_pkey_new();

// Get private key
openssl_pkey_export($res, $privatekey);

// Get public key
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];
Run Code Online (Sandbox Code Playgroud)

创建一个随机密钥对并将其提供给用户,以便每个用户都有一个密钥对.我希望我的用户具有数字签名功能,因此当他们上传文件时,他们会签名.

我决定首先签署一个示例文件(msg.txt)以查看是否可以然后继续.它看起来很直截了当:

openssl_pkcs7_sign("msg.txt", "signed.txt", "signing_cert.pem",
array("private_key.pem", "mypassphrase"),
array()
);
Run Code Online (Sandbox Code Playgroud)

问题是:sign_cert.pem和private_key.pem是什么?我将生成的公钥粘贴在signing_cert.pem中,将私有密钥粘贴在private_key.pem中,但是我看到了这个错误:

Warning: openssl_pkcs7_sign() [function.openssl-pkcs7-sign]: error getting 
private key in /home/ofathian/public_html/msc/ebook/mine/assymetric-test.php 
on line 40
Run Code Online (Sandbox Code Playgroud)

任何意见表示赞赏.

php digital-signature

4
推荐指数
1
解决办法
3万
查看次数

iOS和MacOSX上的私钥签名不同

我在NSData类上实现了一个类别方法,它使用SHA-1哈希返回数据的签名,并使用私钥进行后续加密,如下所示:

- (NSData *)signatureWithKey:(SecKeyRef)keyRef {

    if (keyRef == NULL) {
        return nil;
    }

    NSData *sha1Digest = [self dataWithSHA1Digest];

    size_t maxLength = SecKeyGetBlockSize(keyRef) - 11;

    if ([sha1Digest length] > maxLength) {
        NSString *reason = [NSString stringWithFormat:@"Digest is too long to sign with this key, max length is %ld and actual length is %ld", maxLength, (unsigned long)[self length]];
        NSException *ex = [NSException exceptionWithName:@"BMInvalidArgumentException" reason:reason userInfo:nil];
        @throw ex;
    }

#if TARGET_OS_IPHONE
    OSStatus status = noErr;

    uint8_t *plainBuffer = (uint8_t *)[sha1Digest bytes];
    size_t plainBufferSize …
Run Code Online (Sandbox Code Playgroud)

macos encryption-asymmetric digital-signature ios private-key

4
推荐指数
1
解决办法
963
查看次数

Windows Code-Signing进程和MS signtool.exe的替代?

使用非Microsoft编译器,我已经为Windows编写了一个小应用程序,我想免费赠送或出售一些微不足道的数量(5美元说).该程序不使用注册表,但我想将其作为使用免费工具(例如InnoSetup)创建的安装程序可执行文件(例如MyAppInstall.exe)提供.

签署Windows EXE文件和其他来源,我的理解如下:

  1. 如果我没有签署安装程序,Windows将弹出一个警告对话框,警告用户该发布者未知,并建议他们不要运行该软件.这是不可取的.

  2. 如果我使用自我认证密钥对安装程序进行签名,则弹出对话框将至少提供发布者名称而不是"未知".它会说发布商无法验证或发布商不受信任.这可能比被描述为未知的出版商要好一些.

  3. 如果我每年向CA 支付约100美元,我可以获得一个代码签名证书,这将允许我提供可以轻松安装的有用的免费软件 - 不会出现可怕和令人反感的对话.

  4. 我可以使用OpenSSL的Windows版本来创建自我认证的代码签名密钥.这样我就不必从MS下载安装一个590 MB的SDK文件来获取微软的makecert.exe

  5. Catch 22:我听说的唯一代码签名工具signtool.exe只能通过下载和安装至少590 MB的其他东西(SDK)来获得.

问:有没有替代微软的 signtool.exe

code-signing digital-signature

4
推荐指数
1
解决办法
7041
查看次数

XSD签名问题

我无法解决这个错误<xs:element ref="ds:Signature"/>.我需要一些帮助.

版权所有(C)Microsoft Corporation.版权所有.架构验证警告:未声明' http://www.w3.org/2000/09/xmldsig#:Signature '元素.第162行,第8位.

警告:无法验证架构.类生成可能会失败或可能产生不正确的结果.

警告:无法生成类,因为找不到具有复杂类型的顶级元素.

XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
            xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
  attributeFormDefault="unqualified" elementFormDefault="qualified">

  <xs:import namespace="http://www.w3.org/2000/09/xmldsig#"
             schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/>

             <xs:complexType name="SobreCheques">
        <xs:annotation>
            <xs:documentation>Definition of the ...</xs:documentation>
        </xs:annotation>
        <xs:sequence>
             ...
      <xs:element ref="ds:Signature"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

xml xsd digital-signature visual-studio xml-signature

4
推荐指数
1
解决办法
4470
查看次数