C#代码是这样的:
public string Hash(string text)
{
var data = Encoding.UTF8.GetBytes(text);
SHA1 sha = new SHA1CryptoServiceProvider();
var code = sha.ComputeHash(data);return Convert.ToBase64String(code);
}
text是121122
return是wZ6LpbQl6S2GtHGsAasNJAark7E=delphi好像没有标准的SHA1的转码函数,base64的找到了,在EncdDecd这个单元里有,我怎么写都写不出.net转码的结果。
delphi已经被我写成这样了,已经完全晕了,请高手帮我看看,我是神马地方搞错了。
procedure TForm1.btn1Click(Sender: TObject);
var
    Context:   TSHA1Context;
    Digest:   TSHA1Digest;
    s:   string;
    sm_in,sm_out: TStringStream;
    buf:TBytes;
begin
    s:=UTF8Encode('121122');
    SHA1Init(Context);
    SHA1Update(Context,@s[1],length(s));
    SHA1Final(Context,Digest);
    SetLength(buf,Length(Digest));
    move(Digest[0],buf[0],Length(Digest));
    //buf:=Digest;
    sm_in:=TStringStream.Create(buf);
    sm_out:=TStringStream.Create;
    EncodeStream(sm_in, sm_out);
    ShowMessage(sm_out.DataString);
end;谁能帮帮我。

解决方案 »

  1.   

    sha-1用的是这个帖子里的类,delphi没有标准的sha-1类吗
    http://topic.csdn.net/t/20060315/20/4617108.html
      

  2.   

    delphi官方没有出sha1
    可以下载个cnvcl,里面有sha1.pas
      

  3.   

    我觉得我uft8转码部分可能有点问题
      

  4.   

    搞定了,感谢cdchq帮忙。cnvcl之前就下了,没仔细研究过。
    搞定的代码分享下,base64用的是delphi原本就有的类,sha1用的cnvcl的。
    procedure TForm1.btn1Click(Sender: TObject);
    var
        Digest:   TSHA1Digest;
        utf8Stream: TStringStream;
        s2,s4:AnsiString;
    begin
        utf8Stream:=TStringStream.Create('121122',TEncoding.UTF8);
        Digest:= SHA1Buffer(utf8Stream.Bytes,Length(utf8Stream.Bytes));
        s2:=EncodeBase64(@Digest[0],Length(Digest));
        edt2.Text:= string(s2);
    end;