卡信息加密
EVO Cloud 支持您对请求报文中的卡信息进行加密然后发送,您需要将加密后的卡信息密文放在请求报文中的 encryptedCardInfo
字段。
标准 RSA 加密规则
EVO Cloud 支持使用标准 RSA 加密算法对卡信息进行加密。
密钥使用规则
在使用 RSA 算法对卡信息进行加密时,需要用到一对由 EVOCloud 生成的 RSA 密钥对,您将使用公钥进行加密,EVO Cloud 使用私钥进行解密。公钥可以从 EVO Cloud 平台中下载。
第一步:构造待加密字符串
将请求报文中 cardInfo
结构体整体作为待签名字符串
下面是一个构建完成的待签名字符串的样例
{
"cardNumber": "1234123412341234",
"expiryDate": "0724",
"cvc": "123",
"holderName": ""
}
第二步:加密卡信息
使用 RSA 算法对第一步中得到的待加密字符串进行加密,填充模式为 PKCS1。
假设公钥为
-----BEGIN PUBLIC KEY-----
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBuqFg4TAUyuvDTciQMuOB0
HtAJ/BH0AacJIqkHUaMOIpA4kH+RlHBuUNd2OGdjhprTh0lGXNLi9neH9Wc7b2EE
isG+efE3eRInRRfq6lVWms+3OiVzLqVvVoQI0yg+wIg08wl2+s1tobLJfHXbjWfl
PbzRFnytWyMZXOq2gSGMjTX3QL1O9dWI4/onRTlEmxoHN55R6uO32fa0GaQHE9+w
CH64ZJKXKXVZHhEipHYtXEq0roDJWQTuLa9QdWIpybPgJkfKN2h3I58ve+QAWTOZ
BC1vO5imxE4C71RJuSU+qG8OREeTZGBcvb7GYiLUvU3Z+bg5+IrmAjpi60P9bNez
AgMBAAE=
-----END PUBLIC KEY-----
加密后得到密文为:CvV0wRxQ3W8oSCR0XBe403NClYnUZvVTZXI467jOEuDhRQy57ah4lk3/Kc+eiKjdV0V2wECU4kTF5QDWjdGCQG6ClOJvJv+TgBMVBM8+K4NFsJ3VmT8K/7pkPGCXj8OPz72Lj5ula1EPvkx1ey7qG24THBXOnshCEpQbTy+SX1FB3+0URHdyIqvZ+INvqGey5kuYPLi28loCcAxTFGemA2wTj/eU7yweO9u0HB28/EO5C/IgVTWjAlsdyG66CfGy6We52rZQDiFsIiKLnYVYmGNDJHM4QWC+65BObK8FnFo0zOHBKEZjVQ15e3DBPNvYaRh49gUuka6kONx+167CDw==
(每次计算加密结果时密文结果是不同的)
第三步:将密文放入请求报文中
将报文中的 cardInfoEncryptMethod
设置为您使用的签名算法,将 encryptedCardInfo
设置为第二步中计算得到的签名值,并用 encryptedCardInfo
字段替换 cardInfo
结构体,最终得到最终要发送的报文:
{
"card": {
"encryptedCardInfo": "CvV0wRxQ3W8oSCR0XBe403NClYnUZvVTZXI467jOEuDhRQy57ah4lk3/Kc+eiKjdV0V2wECU4kTF5QDWjdGCQG6ClOJvJv+TgBMVBM8+K4NFsJ3VmT8K/7pkPGCXj8OPz72Lj5ula1EPvkx1ey7qG24THBXOnshCEpQbTy+SX1FB3+0URHdyIqvZ+INvqGey5kuYPLi28loCcAxTFGemA2wTj/eU7yweO9u0HB28/EO5C/IgVTWjAlsdyG66CfGy6We52rZQDiFsIiKLnYVYmGNDJHM4QWC+65BObK8FnFo0zOHBKEZjVQ15e3DBPNvYaRh49gUuka6kONx+167CDw==",
"cardInfoEncryptMethod": "RSA"
}
}
国密加密规则
EVO Cloud 支持使用 SM2 加密算法对卡信息进行加密。
密钥使用规则
在使用国密算法对卡信息进行加密时,需要用到一对由 EVOCloud 生成的 SM2 密钥对,您将使用公钥进行加密,EVO Cloud 使用私钥进行解密。公钥可以从 EVO Cloud 平台中下载。
密钥使用规则 | 收单机构 -> EVO Cloud |
---|---|
加密 | EVO Cloud 的公钥(EVO Cloud 自行生成并线下交互给机构) |
验签 | EVO Cloud 的私钥(EVO CLoud 自行生成并保存) |
密钥格式
私钥:64 个字符(0-9,A-F),不区分大小写
公钥:128 个字符(0-9,A-F),不区分大小写
第一步:构造待加密字符串
将请求报文中 cardInfo
结构体整体作为待签名字符串
下面是一个构建完成的待签名字符串的样例
{
"cardNumber": "1234123412341234",
"expiryDate": "0724",
"cvc": "123",
"holderName": ""
}
第二步:加密卡信息
使用 SM2 算法对第一步中得到的待加密字符串进行加密。EVO Cloud 推荐使用 C1C3C2 作为密文顺序,但同时也支持 C1C2C3 密文顺序。
假设
公钥为:04f9364b9c6040d58ce86d773c74dd3acf04195b88081306d56a0698a736c30e5e277d396b380bdd9dfda341e50b9c8ca8f7a98379a824a6df1347cbc7c6f0dfd3
私钥为:59306fbb8e1a612e4d26091c88c346e63fee9d00dc997357a1728a7513257b9c
说明:
公钥开始前两位 04 是一个前缀,用于表示未压缩的椭圆曲线公钥格式。 表示公钥是由完整的 x 和 y 坐标组成的,而不是使用压缩形式。 EVO Cloud 推荐使用 C1C3C2 作为密文顺序,但同时也支持 C1C2C3 密文顺序 encryption。
C1C3C2 是 SM2 加密输出的一种标准格式,由三部分组成:
- C1:未压缩的随机点 R 的 x 和 y 坐标。
- C3:消息的哈希值与随机点 R 的 x 坐标的组合。
- C2:对称加密后的消息或消息摘要。
这种格式确保了加密数据的机密性和完整性,并且在解密过程中可以通过 C1 和 C3 验证消息的真实性。如果你在处理 SM2 加密数据时遇到 C1C3C2,它只是表示加密数据的组成部分。
加密后得到 Hex 格式的密文为:
e1062939b997da142671a4cf4400add62920f625df42ddb629dbbe89965bbac3f19095e91abbf7f644ab6591b4d9d256902395a294c876b17c9533f685ee615f973d3b2118d5088d04c5f3fc5d56671a3f23b259a377297f1574926e25b28f840d22e3286fbbb3d3f461d648869bb7f8ae9f7a07f2d1e7572ee8afa23153292280d0a6e9d26124ee2329bff2c380f777b98aac3f6339a8d5581f67306c0ca5f3ac4078f36e8e8b3acd5c8057f56c31c0aa
(每次计算加密结果时密文结果是不同的)
第三步:将密文放入请求报文中
将报文中的 cardInfoEncryptMethod
设置为您使用的签名算法,将 encryptedCardInfo
设置为第二步中计算得到的签名值,并用 encryptedCardInfo
字段替换 cardInfo
结构体,最终得到最终要发送的报文:
{
"card": {
"encryptedCardInfo": "e1062939b997da142671a4cf4400add62920f625df42ddb629dbbe89965bbac3f19095e91abbf7f644ab6591b4d9d256902395a294c876b17c9533f685ee615f973d3b2118d5088d04c5f3fc5d56671a3f23b259a377297f1574926e25b28f840d22e3286fbbb3d3f461d648869bb7f8ae9f7a07f2d1e7572ee8afa23153292280d0a6e9d26124ee2329bff2c380f777b98aac3f6339a8d5581f67306c0ca5f3ac4078f36e8e8b3acd5c8057f56c31c0aa",
"cardInfoEncryptMethod": "SM2"
}
}