加密和解密-->急(100分)

  • 主题发起人 主题发起人 Donglizhou
  • 开始时间 开始时间
D

Donglizhou

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好!请问有加密和解密的代码吗?
我本来也有的,但是加密出来为乱码的,晕死了,
不知道有没有加密出来不是乱码的,为英文或数字都可以,代码用DELPHI写的,
请大家帮忙贡献一下了, 谢谢!
 
AES,DES

你到www.delphibox.com下载去吧,到处都是。
 
被加密后的结果文本一般看起来都是乱码的——只要能还原,也没什么关系的——毕竟密
文不是用来给人看的:P

来自:creation-zy, 时间:2003-11-27 23:02:00, ID:2320743
{
名称: 可见等长字符串加密算法
作者: creation_zy
功能: 将可见字符串加/解密成长度相同的可见字符串(使用字符映射表)。
}
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2315731

——这个算法能够满足楼主的“加密出来不是乱码”的要求。

下面是我的双向流式加密算法,有极高的安全性,效率也不错。 :)
http://www.delphibbs.com/keylife/iblog_show.asp?xid=7088
 
delphi自己带的base64加密/解密组建就可以了。
----------Unit1.pas代码----------:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdCoder, IdCoder3to4, IdCoderMIME, IdBaseComponent;

type
TForm1 = class(TForm)
IdEncoderMIME1: TIdEncoderMIME;
IdDecoderMIME1: TIdDecoderMIME;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Text:=IdEncoderMIME1.Encode(memo1.Text)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Text:=IdDecoderMIME1.DecodeString(memo1.Text);
end;

end.


----------窗体代码Unit1.dfm---------
object Form1: TForm1
Left = 192
Top = 107
Width = 308
Height = 232
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 8
Top = 0
Width = 281
Height = 137
TabOrder = 0
end
object Button1: TButton
Left = 8
Top = 152
Width = 75
Height = 25
Caption = #21152#23494
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 200
Top = 152
Width = 75
Height = 25
Caption = #35299#23494
TabOrder = 2
OnClick = Button2Click
end
object IdEncoderMIME1: TIdEncoderMIME
FillChar = '='
Left = 88
Top = 144
end
object IdDecoderMIME1: TIdDecoderMIME
FillChar = '='
Left = 128
Top = 144
end
end
 
res, des的delphi代码,到处都是, 下一个,
 
我有DES的,不过
你把乱码转换成十六进制字串不就行了
解密的时候再转换回来
 
function Encrypt(const S: String): String; //加密
function Decrypt(const S: String): String; //解密
function TransChar(aChar: Char): Integer;
function StrToHex(AStr: string): string;
function HexToStr(AStr: string): string;

Procedure DecodeID(Const Identity:string;var UnitNumber,MemberName,PSWD:string);
var
s:string;
iPos:integer;
begin
s:=Decrypt(Identity);

iPos:=Pos(' ',s);
UnitNumber:=copy(s,1,iPos-1);
system.Delete(s,1,iPos);

iPos:=Pos(' ',s);
MemberName:=copy(s,1,iPos-1);
system.Delete(s,1,iPos);

PSWD:=s;
end;
function Encrypt(const S: String): String; //加密
var
i : Integer;
Key: Word;
begin
Key:=c_key;
Result := S;
for i := 1 to Length(S) do
begin
Result := char(byte(S) xor (Key shr 8));
Key := (byte(Result) + Key) * C1 + C2;
if Result = Chr(0) then
Result := S;
end; //for i := 1 to Length(S) do
Result := StrToHex(Result);
end;
function Decrypt(const S: String): String; //解密
var
I: Integer;
Key: Word;
S1: string;
begin
Key:=c_key;
S1:= HexToStr(S);
Result := S1;
for I := 1 to Length(S1) do
begin
if char(byte(S1) xor (Key shr 8)) = Chr(0) then
begin
Result := S1;
Key := (byte(Chr(0)) + Key) * C1 + C2; //保证Key的正确性  
end
else
begin
Result := char(byte(S1) xor (Key shr 8));
Key := (byte(S1) + Key) * C1 + C2;
end;
end;

end;
function TransChar(aChar: Char): Integer;
begin
if aChar in ['0'..'9'] then
Result := Ord(aChar) - Ord('0')
else
Result := 10 + Ord(AChar) - Ord('A');
end;

function StrToHex(AStr: string): string;
var
i: Integer;
begin
Result := '';
For i := 1 to Length(AStr) do
begin
Result := Result + Format('%2x', [Byte(AStr)]);
end;
i := Pos(' ', Result);
While i <> 0 do
begin
Result := '0';
i := Pos(' ', Result);
end;
end;

function HexToStr(AStr: string): string;
var
I : Integer;
CharValue: Word;
begin
Result := '';
For I := 1 to Trunc(Length(Astr)/2) do
begin
Result := Result + ' ';
CharValue := TransChar(AStr[2*I-1])*16 + TransChar(AStr[2*I]);
Result := Char(CharValue);
end;
end;
 
给你一个简单的例子:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StrUtils, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Edit3: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
LCW:Integer;
LS2E:Integer;
LAM:Integer;
MP:Integer;
Matrix:String;
mov1:String;
mov2:String;
CodeWord:String;
CWL:String;
EncryptedString:String;
EncryptedLetter:String;
strCryptMatrix:array[0..96] of String;
procedure SetKeyStringProperty(sKeyString:String);
Function Encrypt(mstext:String):String;
procedure CreateInitialize();
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.SetKeyStringProperty(sKeyString:String);
begin
CodeWord:=sKeyString;
End;

Function TForm1.Encrypt(mstext:String):String;
var X:Integer;
Y:Integer;
Z:Integer;
C2E:String;
Str2Encrypt:String;
begin
Str2Encrypt := mstext;
LS2E := Length(mstext);
LCW := Length(CodeWord);
EncryptedLetter := '';
EncryptedString := '';

Y := 1;
For X := 1 To LS2E do begin
C2E := copy(Str2Encrypt, X, 1);
MP := Pos(C2E,Matrix);
CWL := Copy(CodeWord, Y, 1);
For Z := 1 To LAM do begin
If copy(strCryptMatrix[Z], MP, 1) = CWL Then begin
EncryptedLetter := Leftstr(strCryptMatrix[Z], 1);
EncryptedString := EncryptedString + EncryptedLetter;
break
End;
end;
Y := Y + 1;
If Y > LCW Then Y := 1;
end;
Result := EncryptedString;
End;

procedure TForm1.CreateInitialize();
var W:Integer;
X:Integer;
begin
Matrix := '8x3p5BeabcdfghijklmnoqrstuvwyzACDEFGHIJKLMNOPQRSTUVWXYZ1246790';
// Matrix := Matrix + Chr(13);
// Matrix := Matrix + Chr(10);
// Matrix := Matrix + Chr(34);
W := 1;
LAM := Length(Matrix);
strCryptMatrix[1] := Matrix;

For X := 2 To LAM do begin
mov1 := LeftStr(strCryptMatrix[W], 1);
mov2 := RightStr(strCryptMatrix[W], (LAM - 1));
strCryptMatrix[X] := mov2 + mov1;
W := W + 1;
end;
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
SetKeyStringProperty('AAA');
edit2.Text:=Encrypt(edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
CreateInitialize;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
edit3.Text:=Encrypt(edit2.Text);
end;

end.
在Matrix中任意改变顺序加密就不一样,还可以添加其他可见字符,先运行Button1Click加密edit1.text到edit2.text,马上再运行Button2Click将edit2.text解密到edit3.text,即edit1.text的值
 
建议用微软的capicom.dll来做加密解密。非常的方便和安全。
 
谢谢大家热心帮助哦,那么多好方法,我都不知道用哪个好?
我测试一下,谢谢了!分给谁了?我给分的标准是:热心和才能,或许对才能分要给多点,我还没有测试,不知道问题到有没有解决了?
先谢谢大家了,在测试中......

TO creation-zy,你好!
因为我加密出来是作为注册码用的,所以不能为乱码,不然,用户不知道怎么输入,连我都不知道怎么输入乱码,就注册不了了?
所以加密出来不能是乱码的,不然注册不了呀,我看看你给的你自己的算法---又是个高手了。

TO 米歇尔,你好!
在验证后,发现加密比较简单,也不能加参数,所以就不太敢要了,还是得谢谢你的提供。

TO dey-999,你好!
你说:
在Matrix中任意改变顺序加密就不一样,还可以添加其他可见字符,先运行Button1Click加密edit1.text到edit2.text,马上再运行Button2Click将edit2.text解密到edit3.text,即edit1.text的值
我怎么没有看见解密代码如:相对Encode的解密Decode方法在哪里了?
我看你都是用Encode的可以吗?

TO weichao9999,你好!
我想纳闷的问一句:DecodeID在这里有什么用了?
有了这段代码,我好象更看不明白了,没有他,我就很明白的理解了,
可能是我理解不进去,请你解释一下了,有他做什么用了?
还有c_key;在哪里申明的了,起到什么作用,我测试不下去了,
好象你这段代码,和我的原来的加密出来为乱码的代码,没有多少差别,是不是加密出来也是乱码了?

TO lgwen, 你好!
你说:
”我有DES的,不过你把乱码转换成十六进制字串不就行了
解密的时候再转换回来“

怎么转换,我寻找了好久,只有把数字或字母转换成功的,
但是怎么把汉字或甚至是乱码转换成16进制,好让用户注册输入?






谢谢大家了!
 
DecodeID没有用,你不用管他
 
后退
顶部