标签: digital-signature

使用 C# 发送加密和签名的电子邮件

我想在不使用任何第三方 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)

c# email encryption mime digital-signature

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

使用用户签名在服务器文档上签名PDF

这是我想要做的:

  1. 用户创建文档(html)
  2. 编辑 - >在服务器上保存PDF
  3. 询问用户是否要签署文件
    • (是)这是问题所在
    • (没有)没问题
  4. ???? (不重要)

所以现在我面临的问题是如何在步骤3中执行此操作(是).如果签名在服务器上没有问题,我有一些html-> php-> pdf类可以使用数字签名进行签名但签名必须是在服务器上作为文件.问题是,我怎样才能直接在服务器上进行.用户选择是,读取签名(从他的计算机上的读者)并发送到服务器并完成签名.在这里,我相信如果没有像Java这样的东西,我就无法做到.在我看来,PHP和JavaScript肯定对于这个动作来说还不够.

有没有人遇到过这样的问题?也许一些准备使用的库?

PS不太确定标签是否正确,但无法弄清楚要放哪个.

php java signing digital-signature

6
推荐指数
1
解决办法
6266
查看次数

在命令行中使用 openssl 使用公钥进行解密

我想“手动”将消息的摘要/散列与该摘要上解密的签名值进行比较。

为此,我想使用属于最初签署摘要的私钥的公钥来解密消息的签名值(签名摘要)。

我有以下物品:

  • 消息的base64摘要值(使用SHA256计算)
  • 已使用私钥签名的 Base64 摘要上的签名值(使用 SHA256 和 RSA 加密)
  • 属于私钥的 .pem 格式的公钥
  • 我有实际的消息(它是 XML 格式,包含文档不同部分的多个签名)。我已经使用 XML 安全库验证了签名。我只对用公钥解密签名值感兴趣。

我对如何使用 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

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

为什么 SmartScreen 筛选器会阻止我的所有可执行文件?

我现在有几个WinForm工具。我将它们发布在内部网站上。所以我的问题是,如果SmartScreen在 IE 中打开过滤器,那么用户将无法下载它们。他们收到“被阻止”的错误消息。如果它被关闭,那么一切都很好,所以这是SmartScreen肯定的。

所有文件均由Verisign证书签名,并且所有文件详细信息均已填写。

那么问题来了:你能否让 SmartScreen 信任你的文件,或者如何绕过它而不让所有用户都将其关闭?

c# digital-signature visual-studio winforms

6
推荐指数
1
解决办法
1686
查看次数

在 Windows 中检查 OSX (.dmg) 文件的数字签名

我当前正在使用 WinVerifyTrust api 检查 Windows 安装程序文件 (.msi) 的数字签名在 C# 中是否有效。我还在验证签名中的指纹是否来自已知列表。

我需要对 C# 中的 Mac OSX 文件 (.dmg)(在 Windows 上)执行相同的操作。有什么办法可以做到这一点吗?

.net c# authenticode digital-signature winverifytrust

6
推荐指数
1
解决办法
1821
查看次数

使用数字签名证书签署的文档在签名后的有效期是多长?

我的理解是,数字证书的有效期最长为 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 再次签署才能使证书有效?

digital-certificate digital-signature

6
推荐指数
1
解决办法
1311
查看次数

验证 JsonWebToken 签名

我收到了 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 的答案,以下是解决方案: …

java digital-signature jwt

6
推荐指数
1
解决办法
4599
查看次数

Signtool.exe /dg /ds /di 选项和时间戳

我们正在努力使用signtool.exe 摘要选项来优化数字签名过程。到目前为止,工作流程如下所示:

  1. 在客户端上创建摘要:signtool.exe sign /f cert /fd sha256 /dg 。我的文件.dll
  2. MyFile.dll.dig摘要发送到我们的签名服务器。
  3. 在签名服务器上签名摘要:signtool.exe sign /f cert /fd sha256 /ds MyFile.dll.dig
  4. 将签名MyFile.dll.dig.signed发送回客户端。
  5. 在客户端创建签名:signtool.exe sign /di .MyFile.dll
  6. 在客户端添加时间戳:signtool.exe timestamp /tr http://some_timestamp_server /td sha256 MyFile.dll

有没有办法在签名服务器上执行时间戳?

code-signing digital-signature trusted-timestamp signtool

6
推荐指数
1
解决办法
1578
查看次数

Pdfbox 签名 - saveIncremental 与 saveIncrementalForExternalSigning

我正在对 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)

java digital-signature pdfbox

6
推荐指数
1
解决办法
1558
查看次数

ETSI.CAdES.detached 和 adbe.pkcs7.detached PDF 签名之间的差异

我有一个正确的、有效的、LTV 的adbe.pkcs7.detached PDF 签名实现,它是按照ISO32000 2008-1RFC5652指南制作的。现在我还尝试允许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 签名?

pdf bouncycastle digital-signature pdfbox

6
推荐指数
1
解决办法
1606
查看次数