跳转到内容

卡信息加密

EVO Cloud 支持您对请求报文中的卡信息进行加密然后发送,您需要将加密后的卡信息密文放在请求报文中的 encryptedCardInfo 字段。

标准 RSA 加密规则

EVO Cloud 支持使用标准 RSA 加密算法对卡信息进行加密。

密钥使用规则

在使用 RSA 算法对卡信息进行加密时,需要用到一对由 EVOCloud 生成的 RSA 密钥对,您将使用公钥进行加密,EVO Cloud 使用私钥进行解密。公钥可以从 EVO Cloud 平台中下载。

第一步:构造待加密字符串

将请求报文中 cardInfo 结构体整体作为待签名字符串

下面是一个构建完成的待签名字符串的样例

json
{ "cardNumber": "1234123412341234", "expiryDate": "0724", "cvc": "123", "holderName": "" }

第二步:加密卡信息

使用 RSA 算法对第一步中得到的待加密字符串进行加密,填充模式为 PKCS1。

假设公钥为

js
-----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 结构体,最终得到最终要发送的报文:

json
{
  "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 结构体整体作为待签名字符串

下面是一个构建完成的待签名字符串的样例

json
{ "cardNumber": "1234123412341234", "expiryDate": "0724", "cvc": "123", "holderName": "" }

第二步:加密卡信息

使用 SM2 算法对第一步中得到的待加密字符串进行加密。EVO Cloud 推荐使用 C1C3C2 作为密文顺序,但同时也支持 C1C2C3 密文顺序。

假设

公钥为:
04f9364b9c6040d58ce86d773c74dd3acf04195b88081306d56a0698a736c30e5e277d396b380bdd9dfda341e50b9c8ca8f7a98379a824a6df1347cbc7c6f0dfd3

私钥为:
59306fbb8e1a612e4d26091c88c346e63fee9d00dc997357a1728a7513257b9c

加密后得到 Hex 格式的密文为:
e1062939b997da142671a4cf4400add62920f625df42ddb629dbbe89965bbac3f19095e91abbf7f644ab6591b4d9d256902395a294c876b17c9533f685ee615f973d3b2118d5088d04c5f3fc5d56671a3f23b259a377297f1574926e25b28f840d22e3286fbbb3d3f461d648869bb7f8ae9f7a07f2d1e7572ee8afa23153292280d0a6e9d26124ee2329bff2c380f777b98aac3f6339a8d5581f67306c0ca5f3ac4078f36e8e8b3acd5c8057f56c31c0aa(每次计算加密结果时密文结果是不同的)

第三步:将密文放入请求报文中

将报文中的 cardInfoEncryptMethod 设置为您使用的签名算法,将 encryptedCardInfo 设置为第二步中计算得到的签名值,并用 encryptedCardInfo 字段替换 cardInfo 结构体,最终得到最终要发送的报文:

json
{
  "card": {
    "encryptedCardInfo": "e1062939b997da142671a4cf4400add62920f625df42ddb629dbbe89965bbac3f19095e91abbf7f644ab6591b4d9d256902395a294c876b17c9533f685ee615f973d3b2118d5088d04c5f3fc5d56671a3f23b259a377297f1574926e25b28f840d22e3286fbbb3d3f461d648869bb7f8ae9f7a07f2d1e7572ee8afa23153292280d0a6e9d26124ee2329bff2c380f777b98aac3f6339a8d5581f67306c0ca5f3ac4078f36e8e8b3acd5c8057f56c31c0aa",
    "cardInfoEncryptMethod": "SM2"
  }
}