卡信息加密
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 平台中下载。
第一步:构造待加密字符串
将请求报文中 cardInfo
结构体整体作为待签名字符串
下面是一个构建完成的待签名字符串的样例
{ "cardNumber": "1234123412341234", "expiryDate": "0724", "cvc": "123", "holderName": "" }
第二步:加密卡信息
使用 SM2 算法对第一步中得到的待加密字符串进行加密。EVO Cloud 推荐使用 C1C3C2 作为密文顺序,但同时也支持 C1C2C3 密文顺序。
假设
公钥为:04f9364b9c6040d58ce86d773c74dd3acf04195b88081306d56a0698a736c30e5e277d396b380bdd9dfda341e50b9c8ca8f7a98379a824a6df1347cbc7c6f0dfd3
私钥为:59306fbb8e1a612e4d26091c88c346e63fee9d00dc997357a1728a7513257b9c
加密后得到 Hex 格式的密文为:e1062939b997da142671a4cf4400add62920f625df42ddb629dbbe89965bbac3f19095e91abbf7f644ab6591b4d9d256902395a294c876b17c9533f685ee615f973d3b2118d5088d04c5f3fc5d56671a3f23b259a377297f1574926e25b28f840d22e3286fbbb3d3f461d648869bb7f8ae9f7a07f2d1e7572ee8afa23153292280d0a6e9d26124ee2329bff2c380f777b98aac3f6339a8d5581f67306c0ca5f3ac4078f36e8e8b3acd5c8057f56c31c0aa
(每次计算加密结果时密文结果是不同的)
第三步:将密文放入请求报文中
将报文中的 cardInfoEncryptMethod
设置为您使用的签名算法,将 encryptedCardInfo
设置为第二步中计算得到的签名值,并用 encryptedCardInfo
字段替换 cardInfo
结构体,最终得到最终要发送的报文:
{
"card": {
"encryptedCardInfo": "e1062939b997da142671a4cf4400add62920f625df42ddb629dbbe89965bbac3f19095e91abbf7f644ab6591b4d9d256902395a294c876b17c9533f685ee615f973d3b2118d5088d04c5f3fc5d56671a3f23b259a377297f1574926e25b28f840d22e3286fbbb3d3f461d648869bb7f8ae9f7a07f2d1e7572ee8afa23153292280d0a6e9d26124ee2329bff2c380f777b98aac3f6339a8d5581f67306c0ca5f3ac4078f36e8e8b3acd5c8057f56c31c0aa",
"cardInfoEncryptMethod": "SM2"
}
}