//********************************************** program Public_Private_Crypto_Simulation5_IBZ_Herdt_Demo3; //calculates simple public private with strong string and hash back SHA1 ;) //http://en.wikipedia.org/wiki/Hash_function,#sign:Max: MAXBOX10: 18/03/2017 19:09:55 //public-private crypto system for education (ppcse), #locs>320 //Crypto Systems Ref Herdt Verlag Netzwerke Sicherheit S.111/119 //10.Ausgabe: {1. Prime1: 23 & Prime2: 47 2. RSA Modul Public [p*q] as N: 1081 3. Phi(N) Private: 10= 22*46 4. Public RSA Exponent: 3 5. Private Key d: 675 6. Public (3,1081) - Private (675,1081) } Const AFILE = 'maxbox4.exe'; //AMESSAGE = 'ab HI! HELLO WORLD OF CRYPTOBOX 3!'; //only to ASCII! OFFSET = 32; //64; // space depends on N mod range AMESSAGE =' Test_String_ 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_.,;!?-*:%^$€~'; var hexd: THexArray; prime1, prime2, rsa_exponent: integer; cryptolist: TStrings; sha1data: string; function setPublic: integer; begin result:= prime1 * prime2; end; function getPHI_N: integer; begin result:= (prime1-1) * (prime2-1); end; function getEPublic: integer; begin result:= RSA_exponent; //round(Power(2,4)+1); end; //Find d such that: e*d mod phi(n) = 1. (as inverse modulo) function getPrivate: integer; begin for it:= 1 to 1000 do //or n depends on bigint if (getEPublic * it mod getPHI_N = 1) then begin //writeln(itoa(it)) result:= it; end end; {Iteration 3 * 1 mod 1012 = 1; 3 * 2 mod 1012 = 1; 3 * 3 mod 1012 = 1; 3 * 400 mod 1012 = 1 } //3 * 675 mod 1012 = 1 {549(c) = 65^675 mod 1012 A = c(549)^3 mod 1012 } function modbig(aval: string; amod: integer): integer; var atbig: TInteger; begin atbig:= TInteger.create(1) atbig.assign2(aval); //writeln(aval) //atbig.pow(234); atbig.modulo1(amod) //atbig.getnextprime; //atbig.ModPow(atbig,atbig); //atbig.invmod(10); //writeln('ret ^'+atbig.tostring(false)) result:= strtoint(atbig.tostring(false)) atbig.free; end; //--------------------------------------------------------------- //private d= e^-1 mod phi(N) //cipher c[i] = m[i]^e (mod N) //decipher m[i] = c[i]^d (mod N) //HELLO WORLD will be 07 04 11 11 14 26 22 14 17 11 03. //07^17 mod 77 = 28 , 04^17 mod 77 = 16 procedure encryptMessage(amess: string; acipher: TStrings); var k,l,i: integer; //integer; //int64; pst: string; begin for i:= 1 to length(amess) do begin l:= ord(amess[i])-OFFSET; //write(inttostr(l)+ 'd ') //debug pst:= Powerbig(l,getEPublic); k:= modbig(pst,setPublic); //write(inttostr(k)+ 'k ') //debug acipher.add(intToStr(k)) end; end; function decryptMessage(alist: TStrings): string; var k,i: int64; pst: string; begin for i:= 0 to alist.count -1 do begin pst:= Powerbig(strtoint(alist[i]),getPrivate); k:= modbig(pst,setPublic); //k:= f mod setPublic; result:= result+ Chr(k+OFFSET); end; end; //----------------------------------------------------------- procedure GetHexArray(var ahexdig: THexArray); begin for it:= 0 to 9 do ahexdig[it]:= chr(it+48); //of 48 for it:= 10 to 15 do ahexdig[it]:= chr(it+55); //of 65 //= '0123456789ABCDEF'; end; function RemoveURIFragment(const URI: string): string; var FragmentStart: Integer; begin FragmentStart:= {SysUtils.}AnsiPos('#', URI); if FragmentStart > 0 then Result:= Copy(URI, 1, FragmentStart - 1) else Result:= URI; end; // demonstrator to cipher hash - digital signature function SHA1A(const fileName: string): string; var idsha: TIdHashSHA1; fs: TFileStream; begin idsha:= TIdHashSHA1.Create; fs:= TFileStream.Create(fileName, fmOpenRead OR fmShareDenyWrite); try //result:= idmd5.AsHex(hash) ; result:= idsha.AsHex(idsha.HashValue(fs)); finally fs.Free; idsha.Free; end; end; procedure ROT13(AStrLst: TStringList); var i, j: integer; c: char; AStr: string; s: string; begin for i := 0 to AStrLst.Count - 1 do begin AStr := AStrLst[i]; s := ''; for j := 1 to Length(AStr) do begin c := AStr[j]; if (((c >= 'A') AND (c <= 'M')) OR ((c >= 'a') AND (c <= 'm'))) then c := chr(ord(c) + 13) else if (((c >= 'N') AND (c <= 'Z')) OR ((c >= 'n') AND (c <= 'z'))) then c := chr(ord(c) - 13); s := s + c; end; AStrLst[i] := s; end; end; procedure TestRemoteShellHell; var oShell, ishell: oleVariant; commandtoRun, commandParms: string; begin oshell:= createOleObject('Shell.Application'); //= new ActiveXObject("Shell.Application"); ishell:= CreateOleObject('WScript.Shell'); ishell.run('cmd /c dir & pause'); //commandtoRun:= 'C:\\Winnt\\Notepad.exe'; commandtoRun:= 'C:\WINDOWS\System32\Calc.exe'; //if (inputparms != "") { //var commandParms = document.Form1.filename.value; //https://twitter.com/maxkleiner //} // Invoke the execute method. oShell.ShellExecute(commandtoRun,commandParms,'','open','1'); end; var c, m: string; Begin //main frame //1. Init - Choose two prime numbers p and q and e. Prime1:= 23 //13; //7; //11; Prime2:= 47 //23; //11; //7; RSA_exponent:= 3; //5; //17; //5; PrintF('1. Modulus Prime1: %d & Prime2: %d',[prime1, prime2]) //2. Let n = p*q. Writeln('2. RSA Modul Public [p*q] as N: '+inttostr(setPublic)) //3. less than n with no factors in common to n. phi(n)=(p-1)(q-1) PrintF('3. Phi(N) Private: %d = %d*%d',[getPHI_N,prime1-1,prime2-1]) //4. Choose e 0 then begin with TIdHashMessageDigest5.Create do try S:= LowerCase(TIdHash128.AsHex(HashValue(S+Password))); finally Free; end;//try Some cryptographic hash functions, such as SHA-1, have even stronger uniformity guarantees than checksums or fingerprints, and thus can provide very good general-purpose hashing functions. In ordinary applications, this advantage may be too small to offset their much higher cost.[5] However, this method can provide uniformly distributed hashes even when the keys are chosen by a malicious agent. This feature may help protect services against denial of service attacks. How RSA works ------------------------------------ Generating the public and private keys. Pick two large prime numbers, p and q. Let n=pq. Typically, n is a number which in binary is written with 1024 bits (in decimal, that's about 308 digits). Pick e relatively prime to (p-1)(q-1). Now find d such that ed=1 mod (p-1)(q-1). You can use Euclid's algorithm to find this d. The pair of numbers (e, n) is the public key. The pair of numbers (d, n) is the private key. The two primes p,q are no longer needed, and can be discarded, but should never be revealed. Exercise. Which of the following key pairs are valid? 1. K=(7,187), K-1=(23,187) 2. K=(23,187), K-1=(7,187) 3. K=(7,143), K-1=(23,143) Can you invert the key (7,299)? Message format. Divide the message into blocks, each block corresponding to a number less than n. For example, for binary data, the blocks will be (log2 n) bits. Encryption. The encryption of message m is c = me mod n. Decryption. To decrypt c, put m' = cd mod n. Generating the public and private keys. Pick two large prime numbers, p and q. Let n=pq. Typically, n is a 1024 bit number. Pick e relatively prime to (p-1)(q-1). Now find d such that ed=1 mod (p-1)(q-1). There is an algorithm which will find this d for you. The pair of numbers (e, n) is the public key. The pair of numbers (d, n) is the private key. The two primes p,q are no longer needed, and can be discarded, but should never be revealed. A response to Diffie Helleman challenge by Ron Rivest, Adi Sharmir, and Len Adleman at MIT. An exponentiation cipher utilizing Euler’s Theorem. Choose two prime numbers p and q. Let n = p*q. The totient ?(n) of n is the number of numbers less than n with no factors in common with n. ?(n)=(p-1)(q-1) E.g., ?(10) =4; since 1,3, 7, 9 are relative prime of 10. Choose e 15} 114: class operator Implicit(a: Int64): TInteger; class operator Implicit(a: TInteger): Int64; class operator Implicit(a: Int64): TInteger; 115: class operator Implicit(a: TInteger): Int64; //class operator Implicit(s: string): TInteger; class operator Implicit(a: TInteger): Int64; 116: //class operator Implicit(s: string): TInteger; //class operator Implicit(a: TInteger): TInteger; //class operator Implicit(s: string): TInteger; 117: //class operator Implicit(a: TInteger): TInteger; class operator Implicit(a: TInteger): string; // write to a string; //class operator Implicit(a: TInteger): TInteger; 118: class operator Implicit(a: TInteger): string; // write to a string; class operator Negative(a: TInteger): TInteger; class operator Implicit(a: TInteger): string; // write to a string; 119: class operator Negative(a: TInteger): TInteger; 3387: 71: procedure SIRegister_TInteger(CL: TPSPascalCompiler); begin begin 3390: 73: //with RegClassS(CL,'TObject', 'TInteger') do with CL.AddClassN(CL.FindClass('TObject'),'TInteger') do begin 73: //with RegClassS(CL,'TObject', 'TInteger') do 3391: with CL.AddClassN(CL.FindClass('TObject'),'TInteger') do begin //with RegClassS(CL,'TObject', 'TInteger') do with CL.AddClassN(CL.FindClass('TObject'),'TInteger') do begin 3392: //with RegClassS(CL,'TObject', 'TInteger') do 74: with CL.AddClassN(CL.FindClass('TObject'),'TInteger') do begin //with RegClassS(CL,'TObject', 'TInteger') do 3393: 74: with CL.AddClassN(CL.FindClass('TObject'),'TInteger') do begin RegisterMethod('Constructor Create( const initialValue : int64)'); RegisterProperty('Digits', 'TDigits', iptr); 3396: 79: RegisterMethod('Procedure Assign( const I2 : TInteger);'); RegisterMethod('Procedure Assign1( const I2 : int64);'); RegisterMethod('Procedure AbsoluteValue'); 3399: 83: RegisterMethod('Procedure Add( const I2 : TInteger);'); RegisterMethod('Procedure Add1( const I2 : int64);'); RegisterMethod('Procedure AssignOne'); 3402: 87: RegisterMethod('Procedure Subtract( const I2 : TInteger);'); RegisterMethod('Procedure Subtract1( const I2 : int64);'); RegisterMethod('Procedure Subtract1( const I2 : int64);'); 3405: 89: RegisterMethod('Procedure Mult( const I2 : TInteger);'); RegisterMethod('Procedure Mult1( const I2 : int64);'); RegisterMethod('Procedure Mult1( const I2 : int64);'); 3408: 91: RegisterMethod('Procedure FastMult( const I2 : TInteger)'); RegisterMethod('Procedure Divide( const I2 : TInteger);'); 91: RegisterMethod('Procedure FastMult( const I2 : TInteger)'); 3409: RegisterMethod('Procedure Divide( const I2 : TInteger);'); RegisterMethod('Procedure FastMult( const I2 : TInteger)'); RegisterMethod('Procedure Divide( const I2 : TInteger);'); 3410: RegisterMethod('Procedure FastMult( const I2 : TInteger)'); 92: RegisterMethod('Procedure Divide( const I2 : TInteger);'); RegisterMethod('Procedure FastMult( const I2 : TInteger)'); 3411: 92: RegisterMethod('Procedure Divide( const I2 : TInteger);'); RegisterMethod('Procedure Divide1( const I2 : int64);'); RegisterMethod('Procedure Divide1( const I2 : int64);'); 3414: 94: RegisterMethod('Procedure Modulo( const I2 : TInteger);'); RegisterMethod('Procedure Modulo1( const N : int64);'); RegisterMethod('Procedure Modulo1( const N : int64);'); 3417: 96: RegisterMethod('Procedure ModPow( const I2, m : TInteger)'); RegisterMethod('Procedure InvMod( I2 : TInteger)'); 96: RegisterMethod('Procedure ModPow( const I2, m : TInteger)'); 3418: RegisterMethod('Procedure InvMod( I2 : TInteger)'); RegisterMethod('Procedure ModPow( const I2, m : TInteger)'); RegisterMethod('Procedure InvMod( I2 : TInteger)'); 3419: RegisterMethod('Procedure ModPow( const I2, m : TInteger)'); 97: RegisterMethod('Procedure InvMod( I2 : TInteger)'); RegisterMethod('Procedure ModPow( const I2, m : TInteger)'); 3420: 97: RegisterMethod('Procedure InvMod( I2 : TInteger)'); RegisterMethod('Procedure DivideRem( const I2 : TInteger; var remain : TInteger)'); 97: RegisterMethod('Procedure InvMod( I2 : TInteger)'); 3421: RegisterMethod('Procedure DivideRem(const I2: TInteger; var remain: TInteger)'); RegisterMethod('Procedure InvMod( I2 : TInteger)'); RegisterMethod('Procedure DivideRem( const I2 : TInteger; var remain : TInteger)'); 3422: RegisterMethod('Procedure InvMod( I2 : TInteger)'); 98: RegisterMethod('Procedure DivideRem( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure InvMod( I2 : TInteger)'); 3423: 98: RegisterMethod('Procedure DivideRem( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemTrunc(const I2 : TInteger; var remain : TInteger)'); 98: RegisterMethod('Procedure DivideRem( const I2 : TInteger; var remain : TInteger)'); 3424: RegisterMethod('Procedure DivideRemTrunc( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRem( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemTrunc(const I2 : TInteger; var remain : TInteger)'); 3425: RegisterMethod('Procedure DivideRem(const I2: TInteger; var remain : TInteger)'); 99: RegisterMethod('Procedure DivideRemTrunc( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRem( const I2 : TInteger; var remain : TInteger)'); 3426: 99: RegisterMethod('Procedure DivideRemTrunc( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemFloor( const I2: TInteger; var remain: TInteger)'); 99: RegisterMethod('Procedure DivideRemTrunc( const I2 : TInteger; var remain : TInteger)'); 3427: RegisterMethod('Procedure DivideRemFloor( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemTrunc(const I2: TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemFloor(const I2 : TInteger; var remain : TInteger)'); 3428: RegisterMethod('Procedure DivideRemTrunc( const I2 : TInteger; var remain : TInteger)'); 100: RegisterMethod('Procedure DivideRemFloor( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemTrunc(const I2: TInteger; var remain : TInteger)'); 3429: 100: RegisterMethod('Procedure DivideRemFloor( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemEuclidean( const I2 : TInteger; var remain : TInteger)'); 100: RegisterMethod('Procedure DivideRemFloor( const I2 : TInteger; var remain : TInteger)'); 3430: RegisterMethod('Procedure DivideRemEuclidean( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemFloor(const I2: TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemEuclidean( const I2 : TInteger; var remain : TInteger)'); 3431: RegisterMethod('Procedure DivideRemFloor( const I2 : TInteger; var remain : TInteger)'); 101: RegisterMethod('Procedure DivideRemEuclidean( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Procedure DivideRemFloor(const I2: TInteger; var remain : TInteger)'); 3432: 101: RegisterMethod('Procedure DivideRemEuclidean( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Function Compare( I2 : TInteger) : integer;'); 101: RegisterMethod('Procedure DivideRemEuclidean( const I2 : TInteger; var remain : TInteger)'); 3433: RegisterMethod('Function Compare( I2 : TInteger) : integer;'); RegisterMethod('Procedure DivideRemEuclidean( const I2 : TInteger; var remain : TInteger)'); RegisterMethod('Function Compare( I2 : TInteger) : integer;'); 3434: RegisterMethod('Procedure DivideRemEuclidean( const I2 : TInteger; var remain : TInteger)'); 102: RegisterMethod('Function Compare( I2 : TInteger) : integer;'); RegisterMethod('Procedure DivideRemEuclidean( const I2 : TInteger; var remain : TInteger)'); 3435: 102: RegisterMethod('Function Compare( I2 : TInteger) : integer;'); RegisterMethod('Function Compare1( I2 : int64) : integer;'); RegisterMethod('Procedure FastSquare'); 3438: 121: RegisterMethod('Procedure Gcd( const I2 : TInteger);'); RegisterMethod('Procedure Gcd1( const I2 : int64);'); RegisterMethod('Procedure RandomOfSize( size : integer)'); 3441: 130: RegisterMethod('Procedure Random( maxint : TInteger)'); RegisterMethod('Procedure Getnextprime'); CL.AddTypeS('TDigits', 'array of int64'); 3444: 139: SIRegister_TInteger(CL); CL.AddDelphiFunction('Procedure SetBaseVal( const newbase : integer)'); atbig:= TInteger.create(123) atbig.assign2('43858699494985567908'); //atbig.pow(234); atbig.mult1(10) atbig.modulo1(1600) atbig.getnextprime; //atbig.ModPow(atbig,atbig); //atbig.invmod(10); writeln(atbig.tostring(false)) atbig.free; ;::@@##~~~öööééé$$$èèè the tech truth behind locky https://www.bleepingcomputer.com/news/security/locky-ransomware-putting-us-to-sleep-with-the-zzzzz-extension/ http://r.virscan.org/report/78d9fcd6f784683a13cb14707bf4f936 http://www.softwareschule.ch/teelicht.jpg http://stackoverflow.com/questions/1880198/how-to-execute-shell-command-in-javascript var exec = require('child_process').exec, child; child = exec('cat *.js bad_file | wc -l', function (error, stdout, stderr) { console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }); child(); password crack "vnffjtuiHJhlui6845u84k