解密 Product/Device Secret


通过 API 获取 product secret 或 device secret 时,返回的 product/device secret 值已经过加密处理。参照以下步骤获取和解密 product secret 和 device secret。


注解

仅当使用 V2.4 版本 的接入服务 API 获取 product/device secret 时,返回的值经过加密处理。使用 V2.4 以前版本的 API 不受影响。

前提条件


  • 确保已获取用于身份授权的服务账号,并已完成授权。更多信息,参见 API 鉴权
  • 解密需访问 EnOS 管理控制台 > 身份与授权 获取当前服务账号的 RSA 密钥对,确保:
    • 当前环境已安装 EnOS 2.4 CU1
    • 拥有当前服务账号所属组织的组织管理员权限。

解密 Product Secret

操作权限


使用 API 获取 product secret 前,需确保服务账号已被授予包含下列服务和操作权限的策略。有关授权服务账号的更多信息,参见 管理服务账号

需授权的服务 所需操作权限
产品 Create 或 Update

操作步骤


Search Product 为例,介绍 product secret 获取和解密步骤。

  1. 参照 管理密钥对 创建或获取服务账号的 RSA 私钥文件。获取的私钥样式如下:


    -----BEGIN PRIVATE KEY-----
    PrivateKeyABC123
    -----END PRIVATE KEY-----
    
  2. 参照 如何调用 API 调用 Search Product API,请求以下参数。设置请求参数 requireSecrettrue 前,确保已为服务帐号创建过 RSA 私钥,否则将请求失败。


    url: https://{apigw-address}/connect-service/v2.4/products?action=search&orgId=yourOrgId
    method: POST
    requestBody:
    {
        "expression":"modelId=\"TestModel\"",
        "pagination":{
            "pageNo":1,
            "pageSize":1
        },
        "requireSecret": true,
        "populateLastUpdateInfo": true
    }
    
  3. 得到以下返回内容:


    {
        "code":0,
        "msg":"OK",
        "requestId":"5428977e-c820-4595-9566-c1ba11c62438",
        "data":[
            {
                "orgId":"yourOrgId",
                "productKey":"productKey",
                "productName":{
                    "defaultValue":"product01",
                    "i18nValue":{}
                },
                "productSecret":"EcryptedProductSecret",
                "sessionKey":"EcryptedsessionKey1",
                "productDesc":"",
                "productType":"Device",
                "dataFormat":"Json",
                "productTags":null,
                "protocolGatewayIds":null,
                "modelId":"TestModel",
                "dynamicActiveEnabled":false,
                "biDirectionalAuth":true,
                "createBy":"u15927947823741",
                "createTime":"1680514029150",
                "updateBy":"u15927947823741",
                "updateTime":1680514029150
            }
        ],
        "pagination":{
            "sortedBy":null,
            "pageNo":1,
            "pageSize":1,
            "totalSize":1980
        }
    }
    
  4. 以 RSA 私钥为密钥,使用 RSA 解密工具计算出实际的 sessionKey。

    • 密钥:

      PrivateKeyABC123
      
    • 密文:

      EcryptedsessionKey1
      
    • 私钥密码:创建密钥对时若设置了私钥密码,需输入私钥密码。

    • 填充方式:PKCS1_Padding

  5. 得到的 sessionKey 样式如下:

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
  6. 使用 AES 解密工具计算出实际的 product secret。

    • 密钥:

      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      
    • 密文:

      EcryptedProductSecret
      
    • 模式:ECB

    • 填充:PKCS7

    • 密文编码:Base64

  7. 生成的明文即为 product secret。

解密 Device Secret

操作权限


使用 API 获取 device secret 前,需确保服务账号已被授予包含下列服务和操作权限的策略。有关授权服务账号的更多信息,参见 管理服务账号

需授权的服务 所需操作权限
设备管理服务 Full Access

操作步骤


Search Device API 为例,介绍 device secret 获取和解密步骤。

  1. 参照 管理密钥对 创建或获取服务账号的 RSA 私钥文件。获取的私钥样式如下:


    -----BEGIN PRIVATE KEY-----
    PrivateKeyABC123
    -----END PRIVATE KEY-----
    
  2. 参照 如何调用 API 调用 Search Device API,请求以下参数。设置请求参数 requireSecrettrue 前,确保已为服务帐号创建过 RSA 私钥,否则将请求失败。


    url:https://{apigw-address}/connect-service/v2.4/devices?action=search&orgId=yourOrgId
    method: POST
    requestBody:
    {
        "expression": "assetId = 'ABC1234'",
        "pagination":{
            "pageNo":1,
            "pageSize":1
        },
        "requireSecret": true,
        "populateLastUpdateInfo": true
    }
    
  3. 得到以下返回内容:


    {
        "code":0,
        "msg":"OK",
        "requestId":"5ee49000-11e0-476f-8a71-ca4f1b975422",
        "data":[
            {
                "orgId":"yourOrgId",
                "assetId":"yourAssetId",
                "modelId":"AT_certificate_certBase_model_1",
                "modelIdPath":"/AT_certificate_certBase_model_1",
                "productKey":"productKey",
                "productName":{
                    "defaultValue":"AT_certificate_certBase_product_1",
                    "i18nValue":{
                        "zh_CN": null,
                        "en_ES": null,
                        "ja_JP": null,
                        "en_US": null
                    }
                },
                "productType":"Device",
                "dataFormat":"Custom",
                "deviceKey":"deviceKey",
                "deviceName":{
                    "defaultValue":"AT_cert",
                    "i18nValue":{
                        "zh_CN":"AT_cert 数据准备"
                    }
                },
                "deviceSecret":"EcrypteddeviceSecret",
                "sessionKey":"EcryptedsessionKey2",
                "deviceDesc":null,
                "timezone":"+09:00",
                "deviceAttributes":{
                    "invType": 0,
                    "Capacity": 123.0
                },
                "deviceTags":{
    
                },
                "mirrorSource": null,
                "firmwareVersion": null,
                "createTime":1679556857342,
                "status":"inactive",
                "activeTime":0,
                "lastOnlineTime":0,
                "lastOfflineTime":0,
                "measurepointLastUpdate":null,
                "eventLastUpdate":null,
                "attributeLastUpdate":null,
                "featureLastUpdate":null
            }
        ],
        "pagination":{
            "sortedBy":null,
            "pageNo":1,
            "pageSize":2,
            "totalSize":211
        }
    }
    
  4. 以 RSA 私钥为密钥,使用 RSA 解密工具计算出实际的 sessionKey。

    • 密钥:

      PrivateKeyABC123
      
    • 密文:

      EcryptedsessionKey2
      
    • 私钥密码:创建密钥对时若设置了私钥密码,需输入私钥密码。

    • 填充方式:PKCS1_Padding

  5. 得到实际的 sessionKey 如下:

    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    
  6. 使用 AES 解密工具计算出实际的 device secret。

    • 密钥:

      [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
      
    • 密文:

      EcrypteddeviceSecret
      
    • 模式:ECB

    • 填充:PKCS7

    • 密文编码:Base64

  7. 生成的明文即为 device secret。