我想在不使用任何第三方 API 的情况下发送加密和签名的邮件。如果我仅发送带有签名的备用视图,Windows Mail 可以对其进行验证。如果我仅使用带有加密数据的备用视图发送,Windows Mail 可以解密它。但如果我同时发送两个附件,Windows Mail 会收到 2 个附件。如果我签名encryptedBytes并将这些签名字节添加到替代视图中,它只会验证签名并且消息为空。任何想法?
MailMessage message = new MailMessage();
message.From = new MailAddress(lblMail.Text);
message.Subject = txtSubject.Text;
string body = "Content-Type: text/plain\r\nContent-Transfer-Encoding: 7Bit\r\n\r\n" + structForm();
byte[] messageData = Encoding.ASCII.GetBytes(body);
ContentInfo content = new ContentInfo(messageData);
EnvelopedCms envelopedCms = new EnvelopedCms(content);
message.To.Add(new MailAddress(provMail));
CmsRecipient recipient = new CmsRecipient(SubjectIdentifierType.SubjectKeyIdentifier, this.certificate);
envelopedCms.Encrypt(recipient);
byte[] encryptedBytes = envelopedCms.Encode();
SignedCms Cms = new SignedCms(new ContentInfo(encryptedBytes));
CmsSigner Signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, new X509Certificate2(@"c:\serv.pfx","123"));
Cms.ComputeSignature(Signer);
byte[] SignedBytes = Cms.Encode();
MemoryStream encryptedStream …Run Code Online (Sandbox Code Playgroud) 这是我想要做的:
所以现在我面临的问题是如何在步骤3中执行此操作(是).如果签名在服务器上没有问题,我有一些html-> php-> pdf类可以使用数字签名进行签名但签名必须是在服务器上作为文件.问题是,我怎样才能直接在服务器上进行.用户选择是,读取签名(从他的计算机上的读者)并发送到服务器并完成签名.在这里,我相信如果没有像Java这样的东西,我就无法做到.在我看来,PHP和JavaScript肯定对于这个动作来说还不够.
有没有人遇到过这样的问题?也许一些准备使用的库?
PS不太确定标签是否正确,但无法弄清楚要放哪个.
我想“手动”将消息的摘要/散列与该摘要上解密的签名值进行比较。
为此,我想使用属于最初签署摘要的私钥的公钥来解密消息的签名值(签名摘要)。
我有以下物品:
我对如何使用 openssl 实现这一目标感到困惑。
我正在尝试对此处和此处描述的命令进行变体,但是我有点迷失了。
我想我应该使用以下方法将签名从 base64 值转换为八位字节:
base64 --d sigfile > sigfile_octet?
然后我使用命令:
openssl rsautl -inkey pubkey.pem -pubin -in sigfile_octet
这会给我解密的八位字节签名值吗?为了将其与 Base64 摘要进行比较,我需要执行哪些后续步骤?
ps 我已经使用Aleksey 的 XML 安全库验证了签名,所以我知道摘要应该与解密的签名值匹配。
非常感谢您的帮助!
亲切的问候,
迪德里克
encryption command-line openssl digital-signature public-key
我现在有几个WinForm工具。我将它们发布在内部网站上。所以我的问题是,如果SmartScreen在 IE 中打开过滤器,那么用户将无法下载它们。他们收到“被阻止”的错误消息。如果它被关闭,那么一切都很好,所以这是SmartScreen肯定的。
所有文件均由Verisign证书签名,并且所有文件详细信息均已填写。
那么问题来了:你能否让 SmartScreen 信任你的文件,或者如何绕过它而不让所有用户都将其关闭?
我当前正在使用 WinVerifyTrust api 检查 Windows 安装程序文件 (.msi) 的数字签名在 C# 中是否有效。我还在验证签名中的指纹是否来自已知列表。
我需要对 C# 中的 Mac OSX 文件 (.dmg)(在 Windows 上)执行相同的操作。有什么办法可以做到这一点吗?
我的理解是,数字证书的有效期最长为 3 年,具体取决于您向证书颁发公司支付的费用。例如,如果我从 emudhra 购买了 DSC,其有效期为 2 年。如果我于 1/6/2017 签署一份文件,并且 DSC 的有效期为 1/1/2017 至 1/1/2019,我签署的文件是否仅在 1/6/2017 起的 1.5 年内有效?有效期为2年吗?
此外,一旦我的 DSC 于 2019 年 1 月 1 日到期,如果我将证书再续签 2 年。我签署的文件的有效期总共为 4 年吗?还是我必须使用更新的 DSC 再次签署才能使证书有效?
我收到了 JWT,想验证它的签名。它未加密,基于 64 编码并使用 HmacSha256 签名。它是用我知道的秘密签署的。
我似乎找不到任何如何在不使用https://jwt.io/上列出的第三方库(即 java-jwt、jpose4j 等)来验证签名的示例。
是否有可能做到这一点?
到目前为止我所拥有的:
private boolean validateSignature( String header, String data, String signature, String secretKey ) throws Exception {
Base64 base64 = new Base64( true );
SecretKeySpec secret = new SecretKeySpec( secretKey.getBytes(), "HmacSHA256" );
Mac mac = Mac.getInstance( "HmacSHA256" );
mac.init( secret );
byte[] hmacDataBytes = mac.doFinal( data.getBytes( StandardCharsets.UTF_8.name()) );
String hmacData = new String( hmacDataBytes );
return hmacData.equals( signature ); // Compare signatures here...
}
Run Code Online (Sandbox Code Playgroud)
根据 @pedrofb 和 @jps 的答案,以下是解决方案: …
我们正在努力使用signtool.exe 摘要选项来优化数字签名过程。到目前为止,工作流程如下所示:
有没有办法在签名服务器上执行时间戳?
我正在对 pdf 文件进行签名,但我有些担心。从 pdfbox 示例中,我看到了两种签署 pdf 的方法。第一个是:
document.saveIncremental(output);
Run Code Online (Sandbox Code Playgroud)
第二种方式:
ExternalSigningSupport externalSigning = doc.saveIncrementalForExternalSigning(fos);
// invoke external signature service
byte[] cmsSignature = sign(externalSigning.getContent());
if (isLateExternalSigning()) {
// this saves the file with a 0 signature
externalSigning.setSignature(new byte[0]);
// remember the offset (add 1 because of "<")
int offset = signature.getByteRange()[1] + 1;
// now write the signature at the correct offset without any PDFBox methods
RandomAccessFile raf = new RandomAccessFile(signedFile, "rw");
raf.seek(offset);
raf.write(Hex.getBytes(cmsSignature));
raf.close();
} else {
// set signature bytes …Run Code Online (Sandbox Code Playgroud) 我有一个正确的、有效的、LTV 的adbe.pkcs7.detached PDF 签名实现,它是按照ISO32000 2008-1和RFC5652指南制作的。现在我还尝试允许ETSI EN 319 142-1中描述的ETSI.CAdES.detached类型签名。据我到目前为止所了解的,主要区别是/SubFilter值、DSS结构、ESS属性和document-time-stamp。为了符合该标准,所有这 4 项更改都是必要的吗?
如果是,最终的 PDF 文档是否具有与adbe.pkcs7.detached文档相同的长期功能 ?
ETSI文档中提到,有必要在过期前重新应用文档时间戳和DSS以保持签名有效,为什么adbe.pkcs7.detached文档中不会发生这种情况以及如何避免这?
SignedData结构中的ESS属性究竟是如何构造的?其中是否还有其他变化?
该代码是使用 Java 中的 PDFBox 和 BouncyCastle 实现的,该库是否也能够实现 ETSI 签名?
c# ×3
java ×3
encryption ×2
pdfbox ×2
.net ×1
authenticode ×1
bouncycastle ×1
code-signing ×1
command-line ×1
email ×1
jwt ×1
mime ×1
openssl ×1
pdf ×1
php ×1
public-key ×1
signing ×1
signtool ×1
winforms ×1