解密 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 2.4 CU1 及以上版本。

  • 拥有当前服务账号所属组织的应用开发人员权限,用于访问 EnOS 应用门户的开发者控制台。

解密 Product Secret


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

  1. 前往 EnOS 应用门户 > 开发者控制台 > 应用注册,创建或获取应用的 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

操作权限


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

  1. 前往 EnOS 应用门户 > 开发者控制台 > 应用注册,创建或获取服务账号的 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。