【问题标题】:"SHA256" sum is not sha256“SHA256”总和不是 sha256
【发布时间】:2018-04-05 08:03:40
【问题描述】:

我已替换 TPK 文件(Tizen 安装包)中的图像,但无法安装。

TPK文件里面有两个签名文件signature1.xml和author-signature.xml。

在他们两个中,他们都有这个:

<Reference URI="shared/res/ACL-splash.png">
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
<DigestValue>wgvWtVSJns8mCgUPfBZ/2ZTBfKqR02zW0MD4tA3cIBE=</DigestValue>
</Reference>

它链接到有关 sha256 值的信息,但是当我找到我编辑的文件的 sha256 值时,我得到了这个:

Sha1:53f3002da277c92d86e1c356ded39ce3dd91512b

Sha256:463e0102f54ee7370b84f5b1570ac0d77791244d5b2b06f023e0e4831a23bfe4

它们的长度都不合适

此外,原始文件的 sha 与列出的不同:

Sha1:4c3e051a5ef68c63a45b38abaa63e1038d318bc3

sha256:c20bd6b554899ecf260a050f7c167fd994c17caa91d36cd6d0c0f8b40ddc2011

当您在 tizen 手机上安装修改后的文件时,它会说:

__return_cb req_id[29370002] pkg_type[tpk] pkgid[VZtRZw5cZM] key[error] val[79] error message: Invalid signature. Signed with wrong key, changed signature file or changed package file
__return_cb req_id[29370002] pkg_type[tpk] pkgid[VZtRZw5cZM] key[end] val[fail]
processing result : SIGNATURE_INVALID_HASH_SIGNATURE [79] failed
spend time for pkgcmd is [6309]ms

(忽略 pkgid 部分)

但是当你在你输入的哈希的末尾添加一个等号时,它会说:

__return_cb req_id[29870002] pkg_type[tpk] pkgid[VZtRZw5cZM] key[error] val[32]
__return_cb req_id[29870002] pkg_type[tpk] pkgid[VZtRZw5cZM] key[end] val[fail]
processing result : CERTIFICATE_INVALID [32] failed
spend time for pkgcmd is [6251]ms

【问题讨论】:

    标签: sha tizen


    【解决方案1】:

    要退出 tizen 包 (.tpk),您需要使用 tizen cli。

    重新签署包。

    窗户:

    tizen package -t tpk -s MyProfile -- C:\Users\workspace\basic\Debug\org.tizen.basic-1.0.0-i386.tpk
    Author certificate: C:\tizen-sdk-data\keystore\author\mycert.p12
    Distributor1 certificate : C:\tizen-sdk\tools\certificate-generator\certificates\distributor\tizen-distributor-signer.p12
    Package (C:\Users\workspace\basic\Debug\org.tizen.basic-1.0.0-i386.tpk) is created successfully.
    

    Ubuntu 和 macOS:

    $ tizen package -t tpk -s MyProfile -- ~/workspace/basic/Debug/org.tizen.basic-1.0.0-i386.tpk
    Author certificate: ~/tizen-sdk-data/keystore/author/mycert.p12
    Distributor1 certificate : ~/tizen-sdk/tools/certificate-generator/certificates/distributor/tizen-distributor-signer.p12
    Package (~/workspace/basic/Debug/org.tizen.basic-1.0.0-i386.tpk) is created successfully.
    

    更多细节,你可以参考下面的tizen cli guide。

    https://developer.tizen.org/development/tizen-studio/native-tools/cli

    【讨论】:

      【解决方案2】:

      您的示例值是十六进制的,而 XML 包含 base64。

      例如,您的 SHA-256 值是 64 个十六进制数字,因此是 32 个字节 - 这对于 256 位的 SHA-256 是有意义的。

      XML 中的 DigestValue 是 44 个字符,包括一个填充字符 - 这是我期望的 32 个字节,其中每 3 个字节需要 4 个字符。

      例如,这里有一些 C# 代码获取 base64 哈希并将其转换为(破折号分隔的)十六进制:

      using System;
      using System.Text;
      
      class Test
      {
          static void Main()
          {
              byte[] hash = Convert.FromBase64String("wgvWtVSJns8mCgUPfBZ/2ZTBfKqR02zW0MD4tA3cIBE=");
              Console.WriteLine(BitConverter.ToString(hash));        
          }
      }
      

      输出是:

      C2-0B-D6-B5-54-89-9E-CF-26-0A-05-0F-7C-16-7F-D9-94-C1-7C-AA-91-D3-6C-D6-D0-C0-F8-B4-0D-DC-20-11
      

      ...它与您为原始文件计算的哈希相匹配,因此至少您知道您正在以正确的方式计算它。

      我对 Tizen 本身一无所知,但听起来您可能需要更新该 XML 文件以包含 SHA-256 哈希的 base64 ......或者如果您删除它,工具是否会替换它你呢?

      【讨论】:

      • 如何将哈希转换为 base64?如果我完全删除它,它只会给出签名错误的密钥错误消息
      • @Qiangong2:我们不知道您使用什么代码来计算哈希,但如果您使用 C#,您只需使用 Convert.ToBase64(hashAsByteArray)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 2020-07-24
      相关资源
      最近更新 更多