javax.crypto.BadPaddingException: Data must start with zero
进行RSA加密和解密的时候,会出现在这样的错误,找了许多答案,有的说是什么byte[]转换为string的时候需要分隔,有的说是“只能公钥加密,私钥解密”
但是在这里,是因为我在分块解密的时候,把byte数组划的块大小限定为64,所以导致错误的,实际上是128
另外一点值得提出的是,对于公钥加密之后的byte数组,如果转为string,然后再取得string的byte数据时候,会导致私钥解密失败,下面是两个byte数组对比
用公钥加密后:
[91, -12, -105, 43, 51, -92, 124, 10, -36, -33, -39, 103, -12, -95, -78, 102, 98, -32, 79, -1, -45, -25, -126, -63, 120, 51, 11, 18, 40, 111, 50, 15, 119, 123, -88, -26, -124, 85, 98, -127, 80, -11, -52, -77, -124, 115, -122, -39, 23, 60, -104, -52, 8, 88, 92, -57, 48, -85, -26, -58, -9, -83, 109, 89, -57, 20, 99, 80, -95, 81, -86, 27, 80, -47, -27, 71, 87, 27, -87, 24, 123, 8, 98, 78, 10, -31, 9, 31, 93, -40, 82, 101, 33, 42, -114, -87, -4, 14, -26, -83, 38, 52, -87, 66, -29, 1, 68, 99, -112, 67, 6, -6, 28, 8, -12, -68, -73, -121, -10, 74, 2, 19, -43, -101, -115, -91, 37, 76]
私钥解密string的byte数组:
[91, -17, -65, -67, -17, -65, -67, 43, 51, -17, -65, -67, 124, 10, -17, -65, -67, -17, -65, -67, -17, -65, -67, 103, -17, -65, -67, -17, -65, -67, -17, -65, -67, 102, 98, -17, -65, -67, 79, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, 120, 51, 11, 18, 40, 111, 50, 15, 119, 123, -17, -65, -67, -17, -65, -67, 85, 98, -17, -65, -67, 80, -17, -65, -67, -52, -77, -17, -65, -67, 115, -17, -65, -67, -17, -65, -67, 23, 60, -17, -65, -67, -17, -65, -67, 8, 88, 92, -17, -65, -67, 48, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, 109, 89, -17, -65, -67, 20, 99, 80, -17, -65, -67, 81, -17, -65, -67, 27, 80, -17, -65, -67, -17, -65, -67, 71, 87, 27, -17, -65, -67, 24, 123, 8, 98, 78, 10, -17, -65, -67, 9, 31, 93, -17, -65, -67, 82, 101, 33, 42, -17, -65, -67, -17, -65, -67, -17, -65, -67, 14, -17, -65, -67, 38, 52, -17, -65, -67, 66, -17, -65, -67, 1, 68, 99, -17, -65, -67, 67, 6, -17, -65, -67, 28, 8, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, 74, 2, 19, -43, -101, -17, -65, -67, -17, -65, -67, 37, 76]
可以看出,明显的不同
显然,第一个数组中的-12 变成了-17, -65, -67以及-105变成了-17, -65, -67
原因是为什么呢?
有人是这样说的:“byte[]转成String的时候,请用BASE64来转码,否则会因为字符转换问题(不是所有的byte组合都能映射为char),导致内容丢失。”
这也是为什么私钥和密钥要用Base64编码的原因了。
另外附上:
Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。
相关推荐
RSA签名验签工具是安全支付领域中不可或缺的一部分,主要用于确保数据传输的安全性和完整性。这个工具支持RSA和RSA2算法,以及MD5哈希算法,能够帮助开发者生成验证密钥对,进行签名和验签操作。在本文中,我们将...
7. **错误处理**:任何加密系统都需要良好的错误处理机制,以确保在输入错误或计算过程中出现异常时能够正确处理。 8. **编码和解码**:RSA通常处理二进制数据,但实际应用中可能需要与ASCII或UTF-8等字符编码进行...
这个C实现的RSA2048签名解决方案可能会包含这些功能的实现,同时可能还包括如何读取和写入密钥文件,以及处理可能出现的错误。通过阅读和分析源代码,学习者可以更深入地理解RSA签名的工作原理,并将其应用于实际...
标题中的“64bit-RSA加密.rar_vb rsa_vb rsa 加密”表明这是一个关于64位版本的...虽然Huffman编码的出现显得有些突兀,但核心内容仍是RSA加密,这对于学习和实践VB编程以及网络加密技术的人来说是一个有价值的资源。
6. **错误处理**:在进行加密和解密操作时,必须处理可能出现的错误。例如,密钥不匹配、内存分配失败等。Qt和openssl都会抛出异常或返回错误代码,需要适当地捕获和处理这些错误。 7. **实现类**:为了封装这些...
例如,使用`OpenSSLError`检查可能出现的错误,并确保正确释放OpenSSL分配的资源,如RSA结构体。 在实际开发中,为了提高安全性,我们可能需要结合其他安全措施,比如消息认证码(MAC)或哈希函数,以验证数据的...
7. 错误检查和异常处理:在实际实现中,还需要考虑错误处理,如确保输入的数字是素数,防止整数溢出等问题。 在压缩包中的"www.pudn.com.txt"可能是关于这个实现的额外说明或源代码的引用,而"rsa"可能是一个包含了...
为了增强代码的鲁棒性,可以添加输入验证、异常处理和用户友好的提示,例如检查输入的数字是否为正整数,确保公钥和私钥的有效性,以及处理可能出现的除零错误等。此外,还可以考虑优化性能,例如使用更高效的素数...
常见的有米勒-拉宾素性检验,这是一种概率性测试,但错误率可以设置得很低。此外,还有更复杂的AKS素性测试,但其复杂度较高,不适合实时应用。 3. **欧拉函数**:欧拉函数φ(n)表示小于n且与n互质的正整数的数量,...
6. **错误处理和性能优化**:在进行RSA分段解密时,需要注意处理可能出现的错误,如密文段的正确性检查、密钥对的有效性验证等。此外,可以考虑使用缓存和多线程技术提高解密速度。 7. **代码实现**:使用Objective...
- 加密和解密过程的实现,以及错误处理机制。 - 可能存在的性能优化,如缓存技术、并行计算等。 总的来说,“rsa-master”项目提供了学习和实践RSA算法的一个平台,通过阅读源代码,你可以深入了解非对称加密的底层...
6. 错误处理和日志记录:在遇到问题时,能够给出清晰的错误提示,同时记录操作日志,便于排查问题。 7. 性能优化:快速执行加密和签名运算,提高工作效率。 在实际应用中,RSA加密签名验签工具广泛应用于电子商务、...
同时,还要注意处理可能出现的错误,如文件读写错误、密钥加载错误等。 参考链接:[http://blog.csdn.net/usister/article/details/74390949](http://blog.csdn.net/usister/article/details/74390949) 这个...
同时,Miracl还提供了错误检查和异常处理机制,确保了算法的可靠性和安全性。 为了使用Miracl库实现RSA,你需要包含相应的头文件,初始化大数环境,然后调用库提供的函数来执行大数运算。例如,可以使用`mirsys()`...
**UML与RSA建模教程** UML(Unified Modeling Language),即统一建模语言,是...掌握UML和RSA,意味着你能够更加系统化地理解软件架构,提高代码的可读性和可维护性,减少开发中的错误,同时增强团队间的沟通与协作。
5. 错误处理:检查所有函数调用的返回值,确保没有出现错误。 在DELPHI7环境下编译通过的这个示例,展示了如何在实际应用中集成OpenSSL库并利用其RSA功能。由于DELPHI7是一个相对较旧的版本,所以这个源码对于那些...
4. **错误处理**:在实际代码中,要添加适当的错误处理机制,如检查输入有效性,处理加密/解密失败等情况。 **在Delphi XE系列中的应用:** 1. **兼容性**:XE系列引入了新的VCL和FireMonkey框架,源码可能需要适应...
6. 错误处理:良好的加密库会包含适当的错误处理机制,以处理可能出现的数学运算异常或密钥不匹配等问题。 7. 兼容性测试:既然提到在XE10.2.3版本的Delphi上测试通过,那么源码应该是经过验证的,可以在该版本的...
5. **错误处理**:确保密文不超过n的范围,以及处理解密失败等情况。 6. **显示结果**:在界面上显示加密后的密文和解密后的明文。 在Qt中,`QBigInteger`类提供了大整数的算术操作,如乘法、模幂等,适合于RSA算法...
在实现RSA时,需要注意选择足够大的素数p和q以保证安全性,同时要防止因计算错误导致的安全漏洞。此外,为了防止中间人攻击,公钥和私钥的分发必须是安全的。 综上所述,RSA编码是一种强大的加密工具,它的理论基础...