Java中网关支付时候私钥加密原因

15 篇文章 1 订阅
9 篇文章 0 订阅

最近做一个项目,就是获取要提交的信息,首先把信息转化为Xml格式,这是原始需要提交的数据,然后经过Base64的编码,URL的编码,最后还要经过私钥加密(加密算法是MD5withRSA)获得的是数字签名的数据,最后把原始数据和签名数据一起通过后台的方式提交给服务器。

疑问:为何要经过私钥加密获得数字签名呢?

数字签名:将报文按照双方约定的HASH算法计算得到一个固定位数的报文摘要。改动任何一位,用同样的算法计算出来的摘要就不一样。然后将该摘要用发送者的私钥加密,然 后连同原报文一起发送给接收者,这就是数字签名。

接收方接收到数字签名后,用同样的HASH算法对原报文计算出摘要后,然后用发送者的公钥对数字签名进行解密,得到报文摘要进行比较。如果相等,则没有被篡改过。

其实上述的私钥解密就是为了安全,看看数据在传输的过程中有没有被篡改。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,可以使用Java加密扩展(JCE)库的RSA算法实现公钥加密私钥解密。下面是一个简单的示例代码: ```java import java.security.*; import javax.crypto.*; import java.util.Base64; public class RSADemo { public static void main(String[] args) throws Exception { String plainText = "Hello, World!"; // 生成RSA密钥对 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); // 使用公钥加密数据 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] encryptedBytes = cipher.doFinal(plainText.getBytes()); // 输出加密后的数据 System.out.println("Encrypted data: " + Base64.getEncoder().encodeToString(encryptedBytes)); // 使用私钥解密数据 cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptedBytes = cipher.doFinal(encryptedBytes); // 输出解密后的数据 System.out.println("Decrypted data: " + new String(decryptedBytes)); } } ``` 在上面的代码,首先生成了一个2048位的RSA密钥对,然后使用公钥加密了字符串"Hello, World!",并输出了加密后的数据。接着使用私钥解密了加密后的数据,输出了解密后的数据。注意,在真实的应用,一般不会直接使用明文字符串作为加密数据,而是先将明文字符串进行哈希处理,然后再加密哈希值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值