RSA_sign()的联机帮助页说明了类型参数:
type denotes the message digest algorithm that was used to generate m. It usually is one of NID_sha1, NID_ripemd160 and NID_md5; see objects(3) for details.
Run Code Online (Sandbox Code Playgroud)
但我在Openssl源代码中看到另一种可用的NID_sha类型.有人可以帮我解决这两者之间的区别吗?
我打算使用RSA_Sign函数来签署SHA-256,SHA-512的摘要,但我没有看到SHA-256和SHA-512的相应类型参数,所以在这些情况下我应该为type参数输入什么.
现在我使用类型为NID_sha并尝试签署SHA-256,SHA-512的哈希,并且两者都成功地工作,它提供了正确的签名,后来的签名验证也是正确的,但我只是想知道是什么是NID_sha?
任何帮助将不胜感激.谢谢!
我有以下一段Java代码,我想使用openssl命令行工具将其转换为shell脚本:
java.security.Signature sig = java.security.Signature.getInstance("SHA1WithRSA");
sig.initSign(privateKey);
sig.update(data);
byte[] signatureBytes = sig.sign();
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试了以下内容:
openssl dgst -sha1 -binary < data.der > data.hash
openssl rsautl -sign -inkey private.key -keyform pem -in data.hash -out data.rsa
Run Code Online (Sandbox Code Playgroud)
但是它不会产生相同的输出.我想它可能与格式或填充等有关.我需要做些什么来纠正openssl脚本?
上面的两个代码都产生了可重复的结果,但java和openssl shell脚本之间的结果是不同的.
所有建议表示赞赏.
亲切的问候Jens
我正在使用OpenSSL生成证书服务请求(CSR).
标准字段是:
通用名称:John Doe
组织:MyCompany Inc.
组织单位:销售
地点:SF
州:CA
国家:美国
电子邮箱:john.doe@mycompany.com
但是,我想将自己的字段添加到证书中,例如:
GroupId:348348923
EmployeeLevel:Class 3
在我请求证书颁发机构(CA)签署CSR之前,执行此操作的正确方法是什么?
我想知道如何验证我创建的签名.我创建签名的代码看起来与此类似:HMAC-SHA1:如何在Java中正确执行?
我发送消息,签名和公钥来验证签名.使用KeyPairGenerator生成公钥和私钥.我如何使用公钥来验证我的签名?或者你可以建议任何好的Java库用于签名和验证使用HMAC SHA1的签名吗?
对不起!我在java中很穷.
请在我错的地方纠正我,改善我穷人的地方!
我正在尝试使用PDFBox使用以下程序对动态创建的pdf进行数字签名:
本程序中的任务:
(i)创建模板PDF
(ii)更新ByteRange,xref,startxref
(iii)构建用于签名创建的原始文档
(iv)创建分离的包络数字签名
(v)通过连接原始Doc部分构建数字签名的PDF文档 - I,独立签名和原始PDF部分 - II
观察:
(i)pdfFileOutputStream.write(documentOutputStream.toByteArray()); 使用Visible Signature创建模板PDF文档.
(ii)它创建一些PDF签名文档,但有错误(a)无效令牌和(b)几个解析器错误
(现在在MKL的能力指导下纠正!)
请建议我以下内容:
(i)如何在layer2上的Visible Signature中添加签名文本.
提前致谢!
package digitalsignature;
import java.awt.geom.AffineTransform;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.security.Signature;
import java.util.ArrayList;
import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.cert.jcajce.JcaCertStore;
import org.bouncycastle.cms.CMSProcessableByteArray;
import org.bouncycastle.cms.CMSTypedData;
import org.bouncycastle.cms.SignerInfoGenerator;
import org.bouncycastle.cms.SignerInfoGeneratorBuilder;
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder;
import org.bouncycastle.util.Store;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.CertStore;
import java.security.cert.Certificate;
import java.security.cert.CollectionCertStoreParameters;
import java.security.cert.X509Certificate;
import java.text.DecimalFormat;
import …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个发生以下情况的应用程序:
我遇到的问题是:服务器似乎不可能在事先没有客户端证书的情况下生成要签名的哈希值.我真的更喜欢创建一个解决方案,其中服务器不需要知道客户端的证书就可以创建文档摘要.
到目前为止,我发现的所有示例都使用PdfPKCS7.getAuthenticatedAttributeBytes函数来获取待签名的哈希值,但这需要知道客户端证书.我看过Bruno Lowagie撰写的"PDF文档的数字签名"白皮书,但我没有看到确切消化的信息.
这是我当前尝试的代码片段:
public byte[] simplePresign(String src, String digestAlgorithm) throws IOException, DocumentException, GeneralSecurityException {
this.digestAlgorithm = digestAlgorithm;
tsaClient = new CustomTSAClient();
PdfReader reader = new PdfReader(src);
os = new ByteArrayOutputStream();
PdfAStamper stamper = PdfAStamper.createSignature(reader, os, '\0', PdfAConformanceLevel.PDF_A_1B);
appearance = stamper.getSignatureAppearance();
PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);
appearance.setCryptoDictionary(dic);
HashMap<PdfName, Integer> exc = new HashMap<PdfName, Integer>();
exc.put(PdfName.CONTENTS, getEstimatedSize(null, tsaClient) * 2 + 2);
appearance.preClose(exc);
InputStream data = appearance.getRangeStream();
MessageDigest mDigest = DigestAlgorithms.getMessageDigest(digestAlgorithm, null);
return DigestAlgorithms.digest(data, mDigest); …Run Code Online (Sandbox Code Playgroud) 是否我知道CMs/pkcs#7签名中缺少一些信息以证明签名在很长一段时间后的有效性已采用CADES格式,是否有其他原因导致用户从CMs/pkcs#7fomats 迁移到Cades.
每种格式的优缺点是什么?先感谢您
带有文本和背景图像的数字文本我正在尝试使用Java中的PDFBox对PDF文件进行数字签名,并在页面上显示与在Acrobat中手动创建的类似的可见文本。如该图所示(我只寻找快照,另一个也拥有数字签名的细节),此示例显示了使用图像文件进行签名。怎么做?

如何使用Python对PDF文档进行数字签名?我有一个令牌(在笔式驱动器中)。
此外,我使用openpyxl创建了一个excel文件,并将其转换为PDF。现在有一个要求,我需要向该PDF文档添加数字签名。
有什么办法可以在python中实现吗?
我正在为我的公司更新一个项目,并且有一个部分需要使用我们的证书文件对pdf进行数字签名。在这种情况下,我应该使用PHP的更新库来更改对该pdf进行签名的脚本。
在旧代码中,我们使用另一个脚本来实现这一点,并且我们必须使用.p12文件+字符串。使用此旧脚本,当您使用Acrobat Reader DC打开创建的pdf时,我们将获得下一张图像,在该图像中您可以看到“签名且所有签名均有效”。
在新脚本中,我使用下一个示例:
https://tcpdf.org/examples/example_052/
为了能够将本示例与我的证书一起应用,我必须将我的pfx文件证书(“ .p12”)转换为2种“ .pem”,并使用以下next命令行:
openssl pkcs12-在myOldCertificate.p12 -clcerts -nokeys -out publicCert.pem->问我“输入导入密码”
openssl pkcs12 -in myOldCertificate.p12 -nocerts -out privateKey_cert.pem->问我“输入导入密码”以及“输入PEM密码”
所以最后,我只是从下载的示例52中更改了89行。
//设置文件签名
$ pdf-> setSignature('file:///var/www/html/publicCert.pem','file:///var/www/html/privateKey_cert.pem','xxxxxx','',2,$信息); ->在“ xxxxx”中,我输入了与导入密码相同的字符串,以防万一,PEM密码也相同。
当我创建数字签名的pdf并使用Acrobat Reader DC打开时,您可以看到下一张图片:
我担心的是,因为我看到“我的公司认证”字样,而且一切正常,但没有绿色勾号,我不确定它是否完全有效。您必须认为我将需要最安全的方法来验证此pdf的真实性和完整性。