C#、Golang、Python、Java(Android)之间Des、Rsa加解密互通系列之前言

前言

最近项目需要写一个接口,返回两个参数,一个参数使用Rsa非对称加密,解密出对称加密用的密钥,另一个参数使用Des进行对称加密。虽然功能不难,但是在多语言之间实现对称、非对称加密互通,也确实费了些力气,觉得该记录下来。
注:互通即语言A加密后生成Base64格式的密文可在语言B中进行解密。

  1. C#、Golang、Python、Java(Android)之间Des、Rsa加解密互通系列之前言
  2. C#、Golang、Python、Java(Android)之间Des、Rsa加解密互通系列之C#
  3. C#、Golang、Python、Java(Android)之间Des、Rsa加解密互通系列之Golang
  4. C#、Golang、Python、Java(Android)之间Des、Rsa加解密互通系列之Python
  5. C#、Golang、Python、Java(Android)之间Des、Rsa加解密互通系列之Java(Android)

对称加密Des

实现Des对称加密在多语言互通需要注意以下几点:

  • 字符编解码统一使用 UTF-8
  • 密码模式统一使用 CBC
  • 填充方式统一使用 PKCS5Padding

非对称加密Rsa

实现Rsa非对称加密在多语言互通需要注意以下几点:

  • 字符编解码统一使用 UTF-8
  • 注意私钥格式Pkcs1和Pkcs8,根据需要自行选择
  • 填充方式统一为RSA/ECB/PKCS1Padding

这个系列中,每种语言的工具类都可以生密钥对,不过,这里还是记录一下,如何使用OpenSSL生成密钥对,每种语言都可以使用OpenSSL生成密钥对进行加密、解密、签名、验签。

  1. 下载,安装
http://slproweb.com/products/Win32OpenSSL.html
  1. 生成私钥(pkcs1)(传统私钥格式)
openssl genrsa -out private_key.pem 1024
  1. 生成公钥
openssl rsa -in private_key.pem -pubout -out public_key.pem
  1. 将pkcs1格式私钥转成pkcs8格式,即Java可用私钥
//create pkcs8_private_key.pem For Java
openssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt
  1. 将pkcs8格式私钥转成pkcs1格式(这一步非必要)
openssl rsa -in pkcs8_private_key.pem -out pkcs1_private_key.pem
  1. 根据已有私钥生成rsaCertReq.csr,这个文件将用于生成证书,提示国家等信息,可以留空,直接回车结束
openssl req -new -key private_key.pem -out rsaCertReq.csr
  1. 根据上一步生成rsaCertReq.csr和私钥,生成证书,有效期10年
openssl x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt
  1. 生成IOS需要的公钥
openssl x509 -outform der -in rsaCert.crt -out public_key.der
  1. 生成IOS需要的私钥,过程中,需要输入密码,一定记住密码,后来有用
openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt

系列中涉及的所有工程源码

C#工程源码 https://github.com/lhtzbj12/csharp_encryption
Golang工程源码 https://github.com/lhtzbj12/go_encryption

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值