zoukankan      html  css  js  c++  java
  • 汉字乱码、加密后结果字符串不一致

    汉字乱码、加密后结果字符串不一致

    以上问题,常见于跨语言或跨操作系统平台。

    遇到这种问题,许多人不知所措。

    引子:

    procedure TForm1.btn1Click(Sender: TObject);
    var
      SERCRET: string;
      signSrc: string;
    begin
      SERCRET := '9dcbb3305c991fe6581c43058efae380';
      signSrc := 'Application-key=e1fce770a0abb2a831d7058d8251e211&X-Yx-Nonce=109418174&X-Yx-Timestamp=1622083573769';
      signSrc := THashSHA2.GetHMAC(signSrc, SERCRET, SHA256);
      me_Msg.Lines.Add('signSrc HMAC SHA256:'+signSrc);
    end;

    end.
    算出来的结果:f209398656572d6e42cb9df347b6a1a1b9e36dd7b1b4c799cf75ec25bf737f5e
    还是跟Java的签名算法的结果不一致。
      Java的结果:1b85a20c429d4949256cc55f735cb312db943ede2637c6dad1ccec3d07274e3f

    原因:charset 必须一样,比如java方是utf8, delphi方也要utf8。

    高版本DELPHI可方便指定CHARSET:

    DELPHI  字符串同tbytes相互转换时要指定 charset。

    charset不同,同样加密算法 得出的结果字符串是不同的。

    中文乱码原因,也是charset不一致所造成的,不同的charset,汉字内码也是不同的。

    关于json字符串处理中文的问题
    因为 服务端和客户端我们都使用相同版本的delphi开发,所以习惯直接传中文。
    但 服务端和客户端如果是跨语言开发,怎么办?
    其实业界通常的做法是 使用汉字内码。
    只要不同开发语言方,使用统一的charset,json中的汉字就不会乱码。
    DELPHI的JSON类,一般有2个方法:asJson 和 asString,前者会将JSON字符串中的汉字转换为汉字内码,后者则不会。

  • 相关阅读:
    项目Beta冲刺(团队) --1/7
    Beta:凡事预则立
    事后诸葛亮(葫芦娃队)
    项目问题回复
    Alpha冲刺阶段总结
    Alpha冲刺笔记十:第十天
    Alpha冲刺随笔九:第九天
    项目测试用例
    Alpha冲刺随笔八:第八天
    项目Beta冲刺(团队2/7)
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/14821084.html
Copyright © 2011-2022 走看看