如何修复com.itextpdf:itextpdf:5.5.13.3中的SHA-1与MD5不安全算法问题?
解决iTextPDF 5.x版本中SHA-1/MD5不安全算法报错问题
问题根源
iText 5.x的部分默认操作(比如PDF签名、哈希校验)依赖SHA-1、MD5这类已被标记为不安全的算法,单纯更换5.x系列的子版本不会改变这个默认行为,所以你试多个版本后仍会遇到报错。
具体解决方案
- 替换签名场景的哈希算法
如果是PDF签名导致的报错,直接显式指定SHA-256及以上的安全算法,替代默认的SHA-1/MD5:
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0'); PdfSignatureAppearance appearance = stamper.getSignatureAppearance(); // 指定SHA-256签名算法 appearance.setSignatureAlgorithm(PdfName.ADBE_PKCS7_SHA256); // 也可以用更安全的SHA-512 // appearance.setSignatureAlgorithm(PdfName.ADBE_PKCS7_SHA512);
- 自定义哈希计算逻辑
如果是文档哈希校验等其他场景,自己实现基于SHA-2系列算法的哈希计算,替换iText默认的旧算法逻辑:
MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(documentBytes); // 用这段逻辑替代iText原生的MD5/SHA-1计算代码
- 升级到iText 7(推荐)
iText 7对安全算法的支持更完善,默认优先使用SHA-2系列算法,从根源上减少旧不安全算法的依赖。如果项目允许,直接切换到com.itextpdf:itext7-core的最新稳定版本。
额外注意事项
- 要是涉及第三方证书,得确保证书本身支持SHA-2系列签名算法,不然代码指定了也会报错。
- 检查项目里其他依赖是否也在使用SHA-1/MD5,别误把其他依赖的问题当成iText的锅。
内容的提问来源于stack exchange,提问作者Akshit Kumar
相关产品推荐
相关产品推荐

