Make(delphi) ver(4.04 build 185) Add(MainForm,2953706,203,140) { Width=802 Height=535 } Add(Memo,11253144,336,91) { Left=10 Top=35 Width=770 Height=170 Strings=#47:===============================================|40: HiAsm 4.04 build 184|47:===============================================|24: Лицензионное соглашение|0:|92: Программа HiAsm (в дальнейшем "Программный продукт") создан Dilma (в дальнейшем "Автор").|90: Настоящим лицензионным соглашением удостоверяются права на "Программный продукт" Dilma.|111: "Программный продукт" "Автора" предназначен для конструирования программ без знаний языков программирования.|413: Программа распространяется по принципу "AS IS", что значит, что при правильном или неправильном использование программы "Автор" ответственности не несет. Вы устанавливаете программу под свою ответственность. За ВСЕ сбои после установки программы "Автор" ответственности не несет. Вы устанавливаете программу на свой страх и риск, хотя "Автором" было сделано все возможное, чтобы ошибок, сбоев, поломок не было.|103: Программа распространяется по принципу "Freeware", что означает, что программа абсолютно бесплатная.|107: По всем вопросам и предложениям связанным с программой, а также недоработках, просьба сообщать "Автору".|2: |55: Домашняя страница в Интернете: http://www.hiasm.com|56: Электронная почта проекта (E-Mail): hiasm@hiasm.com|0:|39: "Автор": Dilma - dilma@hiasm.com|0:|0:|47:===============================================|0:|21:The license agreement|0:|75:1. The program HiAsm (further referred as "Software product") is created by|41:Dilma (further referred as the "Author").|88:The present license agreement is to acknowledge the ownership of all the rights on this |28:"Software product" by Dilma.|0:|68:2. The "Software product" made by "Author" is intended for designing|52:programs without knowledge of programming languages.|0:|68:3. The program is distributed by a principle " AS IS ", which means,|82:that the "Author" does not bear any responsibility on correct or wrong use of the |91:program. You install the program solely under your own responsibility. The "Author" is not |91:responsible for any failures after installation of the program. You install the program at |84:own risk, although, it has been made utmost by the "Author" to prevent any damages, |20:failures and losses.|0:|74:4. The program is distributed by a principle "Freeware", which means, that|41:the program is absolutely free-of-charge.|0:|66:5. Installing and using HiasM signifies acceptance of these terms |30:and conditions of the license.|0:|70:6. If you do not agree with the terms of this license you must remove |67:HiasM files from your storage devices and cease to use the product.|0:|54:On all questions and offers related to the program, or|54:its drawbacks, it is requested to inform the "Author".|0:|29:Webpage: http://www.hiasm.com|21:E-mail: hiasm@mail.ru|0:|37:The "Author": Dilma - dilma@hiasm.com|0:|26:Thank you for using HiasM!| ScrollBars=3 } Add(Edit,10102874,280,105) { Left=10 Top=10 Width=770 Text="WrSxnCNBpJ7Ko4[e",7Ty)a0ykP)62Ce[.bAA;SuOf4*{nagx4s,;5!eHU!v=p3zWrSxnCNBpJ7Ko4[e",7Ty)a0ykP)62Ce[.bAA;SuOf4*{nagWrSxnCNBpJ7Ko4[e",7Ty)a0ykP)62Ce[.bAA;SuOf4*{nagx4s,;5!e" } Add(Memo,10227842,441,168) { Left=10 Top=215 Width=770 Height=75 ScrollBars=3 ReadOnly=0 link(onChange,9874928:doDeCrypt,[(494,174)(494,73)(265,73)(265,202)]) } Add(Memo,8109242,441,224) { Left=10 Top=295 Width=770 Height=170 ScrollBars=3 } Add(Button,15768343,203,189) { Left=365 Top=470 TabOrder=-1 link(onClick,9874928:doCrypt,[]) } Add(Memory,6571277,378,189) { link(onData,10227842:doText,[]) } Add(InlineCode,9874928,280,189) { WorkPoints=#7:doCrypt|9:doDeCrypt| EventPoints=#7:onCrypt|9:onDeCrypt| VarPoints=#10:CypherText|9:PlainText| DataPoints=#11:Password_in|12:PlainText_in|13:CypherText_in| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|7://const|54:// CALG_RC4 = ((3 shl 13) or (4 shl 9) or 1);|54:// CALG_RC2 = ((3 shl 13) or (3 shl 9) or 2);|77:// def = 'WrSxnCNBpJ7Ko4[e",7Ty)a0ykP)62Ce[.bAA;SuOf4*{nagx4s,;5!eHU!v=p3z';|1: |4:type|28: THiAsmClass = class(TDebug)|10: private|28: CypherText_out: string;|27: PlainText_out: string;|9: public|28: Password_in: THI_Event;|29: PlainText_in: THI_Event;|30: CypherText_in: THI_Event;|24: onCrypt: THI_Event;|26: onDeCrypt: THI_Event;|5: |52: procedure doCrypt(var _Data:TData; index:word);|54: procedure doDecrypt(var _Data:TData; index:word);|5: |55: procedure CypherText(var _Data:TData; index:word);|54: procedure PlainText(var _Data:TData; index:word);|5: |5: end;|0:|14:implementation|0:|5:const|39: ADVAPI32 = 'advapi32.dll';|26: PROV_RSA_FULL = 1;|34: CRYPT_VERIFYCONTEXT = $F0000000;|30: CALG_RC2 = 26114;|30: CALG_RC4 = 26625;|30: CALG_DES = 26113;|30: CALG_3DES_112 = 26121;|34: CALG_3DES = 26115; |47: CALG_SHA = ((4 shl 13) or 0 or 4);|75: MS_ENHANCED_PROV = 'Microsoft Enhanced Cryptographic Provider v1.0'; |27: BufferLength = 64;|2: |34: _ALG = CALG_3DES;|1: |4:type|25: HCRYPTPROV = Cardinal;|25: HCRYPTKEY = Cardinal;|25: ALG_ID = Cardinal;|28: PHCRYPTPROV = ^HCRYPTPROV;|27: PHCRYPTKEY = ^HCRYPTKEY;|25: HCRYPTHASH = Cardinal;|28: PHCRYPTHASH = ^HCRYPTHASH;|26: PLongWord = ^LongWord;|0:|132:function CryptReleaseContext(hProv: HCRYPTPROV; dwFlags: LongWord): LongBool; stdcall; external ADVAPI32 name 'CryptReleaseContext';|186:function CryptAcquireContext(Prov: PHCRYPTPROV; Container: PChar; Provider: PChar; ProvType: LongWord; Flags: LongWord): LongBool; stdcall; external ADVAPI32 name 'CryptAcquireContextA';|193:function CryptEncrypt(Key: HCRYPTKEY; Hash: HCRYPTHASH; Final: LongBool; Flags: LongWord; Data: PChar; Len: PLongWord; BufLen: LongWord): LongBool;stdcall;external ADVAPI32 name 'CryptEncrypt';|177:function CryptDecrypt(Key: HCRYPTKEY; Hash: HCRYPTHASH; Final: LongBool; Flags: LongWord; Data: PChar; Len: PLongWord): LongBool; stdcall; external ADVAPI32 name 'CryptDecrypt';|169:function CryptCreateHash(Prov: HCRYPTPROV; Algid: ALG_ID; Key:HCRYPTKEY; Flags: LongInt; Hash: PHCRYPTHASH): LongBool; stdcall; external ADVAPI32 name 'CryptCreateHash';|147:function CryptHashData(Hash: HCRYPTHASH; Data: PChar; DataLen: LongInt; Flags: LongInt): LongBool; stdcall; external ADVAPI32 name 'CryptHashData';|172:function CryptDeriveKey(Prov: HCRYPTPROV; Algid: ALG_ID; BaseData: HCRYPTHASH; Flags: LongInt; Key: PHCRYPTKEY): LongBool; stdcall; external ADVAPI32 name 'CryptDeriveKey';|107:function CryptDestroyHash(hHash: HCRYPTHASH): LongBool; stdcall; external ADVAPI32 name 'CryptDestroyHash';|103:function CryptDestroyKey(hKey: HCRYPTKEY): LongBool; stdcall; external ADVAPI32 name 'CryptDestroyKey';|0:|93:procedure InitPass(var hProv: HCRYPTPROV; var hSKey: HCRYPTKEY; pass: string; alg: LongWord);|3:var|20: hash: HCRYPTHASH;|5:begin|89: CryptAcquireContext(@hProv, nil, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);|48: CryptCreateHash(hProv, CALG_SHA, 0, 0, @hash);|49: CryptHashData(hash, @pass[1], length(pass), 0);|46: CryptDeriveKey(hProv, alg, hash, 0, @hSKey);|25: CryptDestroyHash(hash);|4:end;|0:|30:procedure THiAsmClass.doCrypt;|3:var|12: p: PChar;|33: CountBlock, i, l, sz: LongWord;|19: s, pass: string; |20: hProv: HCRYPTPROV;|19: hSKey: HCRYPTKEY;|5:begin|44: s := ReadString(_Data, PlainText_in) + #0;|30: SetLength(s, Length(s) - 1);|41: pass := ReadString(_Data, Password_in);|0:|37: InitPass(hProv, hSKey, pass, _ALG);|18: sz := Length(s);|0:|42: CountBlock := (sz + 8) div BufferLength;|69: if (sz + 8) mod BufferLength > 0 then CountBlock := CountBlock + 1;|2: |42: SetLength(s, CountBlock * BufferLength);|55: SetLength(CypherText_out, CountBlock * BufferLength);|20: l := BufferLength;|13: p := @s[1];|0:|29: for i := 1 to CountBlock do|7: begin|58: CryptEncrypt(hSKey, 0, false, 0, p, @l, BufferLength);|71: move(p^, CypherText_out[(i - 1) * BufferLength + 1], BufferLength);|25: inc(p, BufferLength);|8: end; |0:|38: SetLength(CypherText_out, (sz + 8));|51: _hi_CreateEvent(_Data, @onCrypt, CypherText_out);|0:|25: CryptDestroyKey(hSKey);|32: CryptReleaseContext(hProv, 0);|4:end;|0:|32:procedure THiAsmClass.doDecrypt;|3:var|12: p: PChar;|33: CountBlock, i, l, sz: LongWord;|19: s, pass: string; |20: hProv: HCRYPTPROV;|19: hSKey: HCRYPTKEY;|5:begin|45: s := ReadString(_Data, CypherText_in) + #0;|30: SetLength(s, Length(s) - 1);|41: pass := ReadString(_Data, Password_in);|0:|37: InitPass(hProv, hSKey, pass, _ALG);|18: sz := Length(s);|2: |36: CountBlock := sz div BufferLength;|63: if sz mod BufferLength > 0 then CountBlock := CountBlock + 1;|0:|42: SetLength(s, CountBlock * BufferLength);|54: SetLength(PlainText_out, CountBlock * BufferLength);|20: l := BufferLength;|13: p := @s[1];|0:|29: for i := 1 to CountBlock do|7: begin|44: CryptDecrypt(hSKey, 0, false, 0, p, @l);|70: move(p^, PlainText_out[(i - 1) * BufferLength + 1], BufferLength);|25: inc(p, BufferLength);|8: end; |0:|31: SetLength(PlainText_out, sz);|52: _hi_CreateEvent(_Data, @onDeCrypt, PlainText_out);|0:|25: CryptDestroyKey(hSKey);|32: CryptReleaseContext(hProv, 0);|4:end;|5: |33:procedure THiAsmClass.CypherText;|5:begin|35: dtString(_Data, CypherText_out); |4:end;|0:|32:procedure THiAsmClass.PlainText;|5:begin|4:end;|0:|0:|0:|4:end.| link(onCrypt,6571277:doValue,[]) link(onDeCrypt,8109242:doText,[(333,202)(333,251)]) link(Password_in,10102874:Text,[]) link(PlainText_in,11253144:Text,[(293,163)(342,163)]) link(CypherText_in,6571277:Value,[(300,177)(342,177)(342,233)(384,233)]) }