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;
谁能帮帮我。。。。
4 个解决方案
#1
sha-1用的是这个帖子里的类,delphi没有标准的sha-1类吗
http://topic.csdn.net/t/20060315/20/4617108.html
http://topic.csdn.net/t/20060315/20/4617108.html
#2
delphi官方没有出sha1
可以下载个cnvcl,里面有sha1.pas
可以下载个cnvcl,里面有sha1.pas
#3
我觉得我uft8转码部分可能有点问题。。。
#4
搞定了,感谢cdchq帮忙。cnvcl之前就下了,没仔细研究过。
搞定的代码分享下,base64用的是delphi原本就有的类,sha1用的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;
#1
sha-1用的是这个帖子里的类,delphi没有标准的sha-1类吗
http://topic.csdn.net/t/20060315/20/4617108.html
http://topic.csdn.net/t/20060315/20/4617108.html
#2
delphi官方没有出sha1
可以下载个cnvcl,里面有sha1.pas
可以下载个cnvcl,里面有sha1.pas
#3
我觉得我uft8转码部分可能有点问题。。。
#4
搞定了,感谢cdchq帮忙。cnvcl之前就下了,没仔细研究过。
搞定的代码分享下,base64用的是delphi原本就有的类,sha1用的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;