加密密码

时间:2012-04-09 20:11:00

标签: delphi delphi-7

我设法对使用以下代码输入的密码进行简单加密,然后在标签标题中显示加密密码,

procedure TfrmLogin.edtAddPasswordClick(Sender: TObject);
var
  NormalPassword, EncryptedPassword: string;
  PasswordChar: Char;
  EncryptedCharValue: string;
  CharPtr: Integer;
  Ptr, n: Integer;
begin
  NormalPassword := Edit1.text;
  EncryptedPassword := '';
  for CharPtr := 1 to Length(NormalPassword) do
  begin
    PasswordChar := NormalPassword[CharPtr];
    EncryptedCharValue := IntToStr (Ord(PasswordChar) * 5 + 14);
    EncryptedPassword := EncryptedPassword + EncryptedCharValue;
    Label1.Caption := EncryptedPassword;
  end;
end;

问题是我想将label1.caption中显示的加密密码转换回其原始形式,点击另一个按钮,我无法弄清楚如何做到这一点。有什么建议吗?

5 个答案:

答案 0 :(得分:6)

尝试使用经过良好测试的可靠算法(如SHA1,MD5等),而不是创建自己的算法来散列(或加密)密码。

回到您的问题,将加密值转换为原始值,您只需要反转算法,尝试此示例。

var
  NormalPassword, EncryptedPassword: String;
  PasswordChar : char;
  EncryptedCharValue : String;
  CharPtr : Integer;
begin
  NormalPassword    :='';
  EncryptedPassword := Label1.Caption; //here is stored the encrypted password
  CharPtr := 1;
  while CharPtr< length(EncryptedPassword) do
    Begin
      EncryptedCharValue:=Copy(EncryptedPassword, CharPtr, 3);
      Inc(CharPtr, 3);
      PasswordChar     := Chr((StrToint(EncryptedCharValue)-14) div 5);
      NormalPassword  :=NormalPassword+ PasswordChar;
    end;
    Label2.Caption := NormalPassword; 
end;

答案 1 :(得分:4)

我知道这是为了完成家庭作业而且想法是获得反转代码,而其他人为此目的提供了太多细节,但我需要将其作为答案,因为它的概念太重要了,不能在注意:

如果您真的在谈论密码,那么您必须使密码可以反转。用户期望他们的密码是安全可靠且不可逆的。

如果您想要这样做的原因是因为您想忘记密码时发送密码,那么答案就是不要

当一个人丢失或忘记密码时,你应将其提供给他们,因为这证明它是不安全的。相反,正确的做法是,在确保他们是注册的用户(通过电子邮件地址或其他方式)后,允许他们输入他们选择的新密码。

答案 2 :(得分:2)

如果你决定按照你所描述的方式去做,你可以通过改变这条线来使它变得可逆:

EncryptedCharValue := IntToStr (Ord(PasswordChar) * 5 + 14);

EncryptedCharValue := format('%.4d', [Ord(PasswordChar) * 5 + 14]);

这将允许您稍后将字符串分成四个字符的块,减去14,除以5,然后将其转换为字符。 我支持我之前的评论 - 如果你确实有一个需要可逆安全性的用例,请使用更强大的算法,例如this question中讨论的那样。

[编辑:四个字符显然更加强大]

答案 3 :(得分:1)

您的功能是一种非常简单的哈希算法,无法逆转。以可以反转的方式存储密码是没有意义的,因为它不会增加任何额外的安全层(除非您使用基于非对称加密的复杂方案)

答案 4 :(得分:0)

简单哈希算法: How do I hash a string with Delphi?

使用密钥算法(CRAM,HMac)进行哈希: HMAC-SHA256 in Delphi