我正在开发一个数字签名 java 类,使用 SHA1withRSA 算法和 256 位证书。但我收到此错误:
签名长度不正确:得到 344,但预期为 256。
我正在使用 SunJSSE 提供程序(未实现 SHA256withRSA 算法),因为他使用 PKCS12 密钥库类型。我需要这个,因为这是一个批处理应用程序。
SAH1withRSA算法与256位证书不兼容吗?
我正在编写一些旧代码,需要更新它才能使用另一个加密提供商。我不是 Java 专家。我试图了解使用javax.crypto.Cipher
和签署哈希值之间有什么区别java.security.Signature
。
现有代码类似于:
Cipher cipher = Cipher.getInstance(CFG_ALGO);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] signature = cipher.doFinal(payload);
Run Code Online (Sandbox Code Playgroud)
我收到的使用新提供程序的示例片段如下所示:
final Signature sign = Signature.getInstance("RSA", SIGNATURE_PROVIDER);
sign.initSign(keystore.getPrivateKey(keyName, keyPass));
sign.update(data);
byte[] signature = sign.sign();
Run Code Online (Sandbox Code Playgroud)
如果我为两者使用相同的提供商,两者之间有什么区别吗?一种方式通常优于另一种方式吗?
我正在尝试使用 iText(sharp,版本 5.5.13)创建自定义数字签名,用户可以从一组四个位置(顶部、底部、左侧和右侧)设置图像位置,如下所示:
权利:
左边:
顶部:
底部:
到目前为止,我尝试在签名的第 0 层上工作,但我认为我做错了,因为签名详细信息是在第 2 层中设置的。
然而,这只是设置图像位置的初始草图。在下面的代码中,我加载图像并将其放入一个块中(想法取自此示例)
PdfTemplate pdfTemplate = sap.GetLayer(0);
ColumnText c1 = new ColumnText(pdfTemplate);
Image img = Image.GetInstance(signatureImage);
Phrase elements = new Phrase();
elements.Add(new Chunk(img, 0, 0, true));
//c1.SetSimpleColumn(elements, 0, 0, rectangle.Width, rectangle.Height / 4, 0, Element.ALIGN_CENTER); // align bottom
//c1.SetSimpleColumn(elements, 0, rectangle.Height / 2, rectangle.Width, rectangle.Height, 0, Element.ALIGN_CENTER); // align top
c1.SetSimpleColumn(elements, rectangle.Width/2, 0, rectangle.Width, rectangle.Height, 0, Element.ALIGN_CENTER); // align right
//c1.SetSimpleColumn(elements, 0, 0, rectangle.Width/2, rectangle.Height, 0, Element.ALIGN_CENTER); // …
Run Code Online (Sandbox Code Playgroud) 我使用 vue-signature 库,但我不知道如何下载生成为图像的 base64 数据,\n这里是库的链接:https: //www.npmjs.com/package/vue-signature \n我已经阅读文档并查看“Save()”方法将图像保存为 PNG/JPG\xe2\x80\xa6 但它给了我 base64 数据,\n谢谢您的协作,我使用 vue js
\nGit 注释是向 Git 对象添加元信息的功能。请参阅这篇Stackoverflow 文章了解更多详细信息。与提交类似,我也想签署注释。
我的本地 Git 配置为对所有提交进行签名。虽然签署 Git 提交按预期工作,但 Git 注释仍然未签名。在我的本地 Git 配置中,我有以下内容:
# excerpt from ~/.gitconfig
[commit]
gpgsign = true
Run Code Online (Sandbox Code Playgroud)
为了签署笔记,我尝试了以下方法。
# excerpt from ~/.gitconfig
[commit]
gpgsign = true
Run Code Online (Sandbox Code Playgroud)
我怎样才能使 Git 注释也被签名?
我正在用Python编写宠物项目,它涉及用户A和B通过网络进行交互,试图确保每个用户都有来自用户C的同一文件的本地副本.
这个想法是C给每个文件经过数字签名.A&B交易他们拥有的数字签名,并在他们自己的副本上查看.如果签名失败,则其中一个具有不正确/损坏/修改的文件版本.
因此,问题是,C可以分发单个文件,以某种方式包含它自己的签名吗?或者C是否需要单独提供文件和签名?
我希望能够使用Microsoft CryptoAPI验证OpenSSL生成的DSA签名.
考虑您有以下输入:
签名已从Base64转换为48个字节的系列.
我尝试使用iText以数字方式签署pdf,并且我在这个例子中成功地帮助了我.
我想做的只是显示签名者的标志,而不是文字说明
XXXX在XXXX日期间以数字方式签名
如果我使用签名设置图像,则会显示图像,但我无法删除那些对我无用的描述(在签名项目中可读,不需要在pdf的主视图上显示).
PdfSignatureAppearance appearance = stamper .getSignatureAppearance();
appearance.setImage(Image.getInstance(IMAGE));
appearance.setVisibleSignature(new Rectangle(0, 672, 200, 792), 1, "first");
Run Code Online (Sandbox Code Playgroud)
这些是示例中显示的标志性外观,并且(显然)没有写出我提到的描述.
是否有可能将它们从签名外观中删除?
无辜地,我认为"SHA1withRSA算法"只是用"SHA1"操作plainText,并使用RSA/pkcs1padding来加密"SHA1"的结果.但是,我发现我错了,直到我写了一些java代码来测试我的想法.我使用RSA publickey来解密签名,我使用相应的私钥来签署"SHA1withRSA算法".但我发现结果不等于"SHA1(plainText)",下面是我的java代码:
String plaintext= "123456";
Signature signature=Signature.getInstance("SHA1withRSA",new BouncyCastleProvider());
signature.initSign(pemPrivatekey);
signature.update(plaintext.getBytes());
byte[] sign = signature.sign();
//RSA decode
byte[] bytes = RsaCipher.decryptByRsa(sign, pemPublickey);
String rsaDecodeHex=Hex.toHexString(bytes);
System.out.println(rsaDecodeHex.toLowerCase());
String sha1Hex = Hash.getSha1(plaintext.getBytes());
System.out.println(sha1Hex);
//rsaDecodeHex!=sha1Hex
Run Code Online (Sandbox Code Playgroud)
很容易找到rsaDecodeHex!=sha1Hex
,在哪里
rsaDecodeHex = 3021300906052b0e03021a050004147c4a8d09ca3762af61e59520943dc26494f8941b
和
sha1Hex = 7c4a8d09ca3762af61e59520943dc26494f8941b.
那么,"SHA1withRSA"的细节是什么?
我正在使用itext库验证数字签名的pdf,以下示例可在https://developers.itextpdf.com/examples/security/digital-signatures-white-paper/digital-signatures-chapter-5站点上找到.我在验证数字签名文档时遇到以下错误.任何人都可以帮助解决这个问题.
Exception in thread "main" ExceptionConverter: java.security.NoSuchAlgorithmException: SHA256with1.2.840.10045.4.3.2 Signature not available
at java.security.Signature.getInstance(Signature.java:229)
at com.itextpdf.text.pdf.security.PdfPKCS7.initSignature(PdfPKCS7.java:697)
at com.itextpdf.text.pdf.security.PdfPKCS7.<init>(PdfPKCS7.java:459)
at com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2420)
at com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2373)
at nic.test.C5_01_SignatureIntegrity.verifySignature(C5_01_SignatureIntegrity.java:24)
at test.ExtractSignInfor.inspectSignature(ExtractSignInfor.java:95)
at test.ExtractSignInfor.inspectSignatures(ExtractSignInfor.java:135)
at test.ExtractSignInfor.main(ExtractSignInfor.java:63)
Run Code Online (Sandbox Code Playgroud) java ×5
itext ×3
cryptography ×2
pdf ×2
base64 ×1
bouncycastle ×1
c# ×1
certificate ×1
cryptoapi ×1
encryption ×1
file ×1
git ×1
git-notes ×1
image ×1
javascript ×1
jca ×1
jce ×1
openssl ×1
python ×1
rsa ×1
security ×1
sha1 ×1
vue.js ×1