最近在调试遇到了一个 RSA 加密的问题,服务端把 public key 发送给客户端,客户端使用 public key 数据进行加密,再把加密后的数据发送给服务端,但是当我把加密后的数据发送给服务端的时候,服务端发生了一个异常:
javax
有很多人遇到了这个问题,但是各种尝试之后都不能解决我的问题,最后搜索到了一个回答
https://stackoverflow.com/questions/6069369/rsa-encryption-difference-between-java-and-android/7760365#7760365
大概是说 Android 和 Java 的某些虚拟机机制不同导致的。我修改了代码的 Cipher 之后果然就可以了。
下面再对 RSA 加密做一个总结。RSA 加密算法是一种非对称加密算法,加密端使用 public key 对数据进行加密,解密端使用 private key 对数据进行解密。
下面写一个例子大概解释一下整个加密解密过程
- 首先生成一个公钥和秘钥供后期使用
/** 生成公钥和秘钥 */
- 加密过程
/**
- 解密过程
/**
- 整个加密流程如下:
public
- 从控制台可以看到加密之后的数据和解密之后的数据分别是:
- 加密之后的数据:
l506aM/ruBQOIKZhLTodreceKiQqn1JDIjWt1gk7St7+vLavdnfq/kTspKwc3jhWU4BC0aytz1Vrq6BIJD71dAqVDcyhhzSSwJuwR//0HTGWR5Njl+ey1aSp0sp4yICbqCxp75lkxoRlXagHsKjpSPhAgD0K+eSg+Ujg48p6+cGNncLCiVAHCt6E4rRJPjRn0fKzmPiNsjriNg5qVTxBfbuEbpPjb9v5Km1Hh1us9/M6g2zeCGIe5lvK0Td/CpXKwemhU8ayeBasHUkcB+SE05ieU3T6fRjGJ0/9Oeun1a4PNtBue5ckic2HsVv3XDpQb6eCV21LsOjfBK/I7pMhiQ==
- 解密之后的数据:
hello world
- 总结:RSA 加密是在开发总常用的加密,尤其是前后端数据交互的时候,在开发的过程中我们要对流程有一个熟悉的了解。
全部代码: https://github.com/brainweiyi/java-study