DELPHI、PHP、C#通用DES編碼解碼單元 (DELPHI下使用的程式碼)
unit uDES; {*********************************************************} {* DELPHI、PHP、C#通用DES編碼解碼單元 *} {* blessed 2016-10-18 *} {*********************************************************} {EncryStr為編碼函式,DecryStr為解碼函式,Key為密碼,pvIV為偏移量, 一般設定Key,pvIV相同,內容為八位位元組長度的字串,編碼結果為十六進位制字串} interface uses Windows, Classes, SysUtils,Dialogs,Base64; type fdArray = array of dword; /// <summary> /// DES加密返回BASE64後的資料 /// </summary> /// <param name="Str"></param> /// <param name="Key"></param> /// <param name="pvIV"></param> /// <returns></returns> function EncryStr(Str, Key: String;pvIV:string): String; /// <summary> /// DES解密 /// </summary> /// <param name="Str"></param> /// <param name="Key"></param> /// <param name="pvIV"></param> /// <returns></returns> function DecryStr(Str, Key: String;pvIV:string): String; /// <summary> /// DES加密返回16進位制的資料 /// </summary> /// <param name="Str"></param> /// <param name="Key"></param> /// <param name="pvIV"></param> /// <returns></returns> function EncryStrHex(Str, Key: String;pvIV:string): String; /// <summary> /// DES解密 /// </summary> /// <param name="Str"></param> /// <param name="Key"></param> /// <param name="pvIV"></param> /// <returns></returns> function DecryStrHex(Str, Key: String;pvIV:string): String; function des(key:string;smessage:string;encrypt:dword;mode:dword;iv:string):string; function des_createKeys(key:string):fdArray; function StrToHex(Str:string):string; function HexToStr(Hex:string):string; function IsInt(Str:String):Boolean; implementation function EncryStr(Str, Key: String;pvIV:string): String; var i:integer; str1:string; Astr:string; vi:array [0..7] of Byte; begin for i:=0 to 7 do begin if i > (length(pvIV)-1) then vi[i]:=0 else vi[i] := byte(pvIV[i+1]); end; for i := 0 to 7 do begin str1 :=str1 + Chr(vi[i]); end; Result :=Base64EncodeStr(des(Key, Str, 1, 1, str1)); end; function DecryStr(Str, Key: String;pvIV:string): String; var i:integer; vistr:string; vi:array [0..7] of Byte; begin for i:=0 to 7 do begin if i > (length(pvIV)-1) then vi[i]:=0 else vi[i] := byte(pvIV[i+1]); end; for i := 0 to 7 do begin vistr :=vistr + Chr(vi[i]); end; Result := trim(des(Key, Str, 0, 0, vistr)); end; function EncryStrHex(Str, Key: String ;pvIV:string): String; var i:integer; vistr:string; vi:array [0..7] of Byte; begin for i:=0 to 7 do begin if i > (length(pvIV)-1) then vi[i]:=0 else vi[i] := byte(pvIV[i+1]); end; for i := 0 to 7 do begin vistr :=vistr + Chr(vi[i]); end; Result := trim(StrToHex(des(Key,Str, 1,1, vistr))); {1:加密1:CBC } end; function DecryStrHex(Str, Key: String;pvIV:string): String; var i:integer; vistr:string; vi:array [0..7] of Byte; begin for i:=0 to 7 do begin if i > (length(pvIV)-1) then vi[i]:=0 else vi[i] := byte(pvIV[i+1]); end; for i := 0 to 7 do begin vistr :=vistr + Chr(vi[i]); end; Result := trim(des(Key, HexToStr(Str), 0, 1, vistr )); end; function des(key:string;smessage:string;encrypt:dword;mode:dword;iv:string):string; const spfunction1 : array[0..63] of dword = ($1010400,0,$10000,$1010404,$1010004,$10404,$4,$10000,$400,$1010400,$1010404,$400,$1000404,$1010004,$1000000,$4,$404,$1000400,$1000400,$10400,$10400,$1010000,$1010000,$1000404,$10004,$1000004,$1000004,$10004,0,$404,$10404,$1000000,$10000,$1010404,$4,$1010000,$1010400,$1000000,$1000000,$400,$1010004,$10000,$10400,$1000004,$400,$4,$1000404,$10404,$1010404,$10004,$1010000,$1000404,$1000004,$404,$10404,$1010400,$404,$1000400,$1000400,0,$10004,$10400,0,$1010004); spfunction2 : array[0..63] of dword = ($80108020,$80008000,$8000,$108020,$100000,$20,$80100020,$80008020,$80000020,$80108020,$80108000,$80000000,$80008000,$100000,$20,$80100020,$108000,$100020,$80008020,0,$80000000,$8000,$108020,$80100000,$100020,$80000020,0,$108000,$8020,$80108000,$80100000,$8020,0,$108020,$80100020,$100000,$80008020,$80100000,$80108000,$8000,$80100000,$80008000,$20,$80108020,$108020,$20,$8000,$80000000,$8020,$80108000,$100000,$80000020,$100020,$80008020,$80000020,$100020,$108000,0,$80008000,$8020,$80000000,$80100020,$80108020,$108000); spfunction3 : array[0..63] of dword = ($208,$8020200,0,$8020008,$8000200,0,$20208,$8000200,$20008,$8000008,$8000008,$20000,$8020208,$20008,$8020000,$208,$8000000,$8,$8020200,$200,$20200,$8020000,$8020008,$20208,$8000208,$20200,$20000,$8000208,$8,$8020208,$200,$8000000,$8020200,$8000000,$20008,$208,$20000,$8020200,$8000200,0,$200,$20008,$8020208,$8000200,$8000008,$200,0,$8020008,$8000208,$20000,$8000000,$8020208,$8,$20208,$20200,$8000008,$8020000,$8000208,$208,$8020000,$20208,$8,$8020008,$20200); spfunction4 : array[0..63] of dword = ($802001,$2081,$2081,$80,$802080,$800081,$800001,$2001,0,$802000,$802000,$802081,$81,0,$800080,$800001,$1,$2000,$800000,$802001,$80,$800000,$2001,$2080,$800081,$1,$2080,$800080,$2000,$802080,$802081,$81,$800080,$800001,$802000,$802081,$81,0,0,$802000,$2080,$800080,$800081,$1,$802001,$2081,$2081,$80,$802081,$81,$1,$2000,$800001,$2001,$802080,$800081,$2001,$2080,$800000,$802001,$80,$800000,$2000,$802080); spfunction5 : array[0..63] of dword = ($100,$2080100,$2080000,$42000100,$80000,$100,$40000000,$2080000,$40080100,$80000,$2000100,$40080100,$42000100,$42080000,$80100,$40000000,$2000000,$40080000,$40080000,0,$40000100,$42080100,$42080100,$2000100,$42080000,$40000100,0,$42000000,$2080100,$2000000,$42000000,$80100,$80000,$42000100,$100,$2000000,$40000000,$2080000,$42000100,$40080100,$2000100,$40000000,$42080000,$2080100,$40080100,$100,$2000000,$42080000,$42080100,$80100,$42000000,$42080100,$2080000,0,$40080000,$42000000,$80100,$2000100,$40000100,$80000,0,$40080000,$2080100,$40000100); spfunction6 : array[0..63] of dword = ($20000010,$20400000,$4000,$20404010,$20400000,$10,$20404010,$400000,$20004000,$404010,$400000,$20000010,$400010,$20004000,$20000000,$4010,0,$400010,$20004010,$4000,$404000,$20004010,$10,$20400010,$20400010,0,$404010,$20404000,$4010,$404000,$20404000,$20000000,$20004000,$10,$20400010,$404000,$20404010,$400000,$4010,$20000010,$400000,$20004000,$20000000,$4010,$20000010,$20404010,$404000,$20400000,$404010,$20404000,0,$20400010,$10,$4000,$20400000,$404010,$4000,$400010,$20004010,0,$20404000,$20000000,$400010,$20004010); spfunction7 : array[0..63] of dword = ($200000,$4200002,$4000802,0,$800,$4000802,$200802,$4200800,$4200802,$200000,0,$4000002,$2,$4000000,$4200002,$802,$4000800,$200802,$200002,$4000800,$4000002,$4200000,$4200800,$200002,$4200000,$800,$802,$4200802,$200800,$2,$4000000,$200800,$4000000,$200800,$200000,$4000802,$4000802,$4200002,$4200002,$2,$200002,$4000000,$4000800,$200000,$4200800,$802,$200802,$4200800,$802,$4000002,$4200802,$4200000,$200800,0,$2,$4200802,0,$200802,$4200000,$800,$4000002,$4000800,$800,$200002); spfunction8 : array[0..63] of dword = ($10001040,$1000,$40000,$10041040,$10000000,$10001040,$40,$10000000,$40040,$10040000,$10041040,$41000,$10041000,$41040,$1000,$40,$10040000,$10000040,$10001000,$1040,$41000,$40040,$10040040,$10041000,$1040,0,0,$10040040,$10000040,$10001000,$41040,$40000,$41040,$40000,$10041000,$1000,$40,$10040040,$1000,$41040,$10001000,$40,$10000040,$10040000,$10040040,$10000000,$40000,$10001040,0,$10041040,$40040,$10000040,$10040000,$10001000,$10001040,0,$10041040,$41000,$41000,$1040,$1040,$40040,$10000000,$10041000); var keys:fdArray; m, i, j,k,mm:integer; temp, temp2, right1, right2, left, right:dword; looping:array of integer; cbcleft, cbcleft2, cbcright, cbcright2:dword; endloop, loopinc:integer; len, iterations:integer; chunk:integer; tempresult:string; begin //create the 16 or 48 subkeys we will need keys := des_createKeys(key); m:=0;cbcleft:=0;cbcleft2:=0;cbcright:=0;cbcright2:=0;chunk:=0; len := length(smessage); //set up the loops for single and triple des if length(keys) = 32 then iterations := 3 else iterations := 9; if iterations = 3 then begin if encrypt = 1 then begin setlength(looping,3); looping[0] := 0; looping[1] := 32; looping[2] := 2; end else begin setlength(looping,3); looping[0] := 30; looping[1] := -2; looping[2] := -2; end; end else begin if encrypt = 1 then begin setlength(looping,9); looping[0] := 0; looping[1] := 32; looping[2] := 2; looping[3] := 62; looping[4] := 30; looping[5] := -2; looping[6] := 64; looping[7] := 96; looping[8] := 2; end else begin setlength(looping,9); looping[0] := 94; looping[1] := 62; looping[2] := -2; looping[3] := 32; looping[4] := 64; looping[5] := 2; looping[6] := 30; looping[7] := -2; looping[8] := -2; end; end; //*********下面的是關鍵部分及對於c#補位( 待加密資料按照PKCS5規則進行補位。(缺7位補7個0x07,缺6位則補6個0x06,以次類推,如果正好8位,也需要補8個0x08)********* mm:= 8-Length(smessage) mod 8 ; for k:=0 to mm-1 do begin smessage:= smessage +chr(mm); end; //store the result here result := ''; tempresult := ''; if mode = 1 then //CBC mode (這裡也是關鍵C#DES加密預設是CBC模式) begin cbcleft := (ord(iv[m+1]) shl 24) or (ord(iv[m+2]) shl 16) or (ord(iv[m+3]) shl 8) or ord(iv[m+4]); cbcright := (ord(iv[m+5]) shl 24) or (ord(iv[m+6]) shl 16) or (ord(iv[m+7]) shl 8) or ord(iv[m+8]); m:=0; end; //loop through each 64 bit chunk of the message if encrypt=1 then len:=Length(smessage); //(加密也和c#一樣) while m < len do begin left := (ord(smessage[m+1]) shl 24) or (ord(smessage[m+2]) shl 16) or (ord(smessage[m+3]) shl 8) or ord(smessage[m+4]); right := (ord(smessage[m+5]) shl 24) or (ord(smessage[m+6]) shl 16) or (ord(smessage[m+7]) shl 8) or ord(smessage[m+8]); m := m + 8; //for Cipher Block Chaining mode, xor the message with the previous result if mode = 1 then if encrypt=1 then begin left := left xor cbcleft; right := right xor cbcright; end else begin cbcleft2 := cbcleft; cbcright2 := cbcright; cbcleft := left; cbcright := right; end; //first each 64 but chunk of the message must be permuted according to IP temp := ((left shr 4) xor right) and $0f0f0f0f; right := right xor temp; left := left xor (temp shl 4); temp := ((left shr 16) xor right) and $0000ffff; right := right xor temp; left := left xor (temp shl 16); temp := ((right shr 2) xor left) and $33333333; left := left xor temp; right := right xor (temp shl 2); temp := ((right shr 8) xor left) and $00ff00ff; left := left xor temp; right := right xor (temp shl 8); temp := ((left shr 1) xor right) and $55555555; right := right xor temp; left := left xor (temp shl 1); left := ((left shl 1) or (left shr 31)); right := ((right shl 1) or (right shr 31)); //do this either 1 or 3 times for each chunk of the message j:=0; while j<iterations do begin endloop := looping[j+1]; loopinc := looping[j+2]; //now go through and perform the encryption or decryption i:= looping[j]; while i<>endloop do begin right1 := right xor keys[i]; right2 := ((right shr 4) or (right shl 28)) xor keys[i+1]; //the result is attained by passing these bytes through the S selection functions temp := left; left := right; right := temp xor (spfunction2[(right1 shr 24) and $3f] or spfunction4[(right1 shr 16) and $3f] or spfunction6[(right1 shr 8) and $3f] or spfunction8[right1 and $3f] or spfunction1[(right2 shr 24) and $3f] or spfunction3[(right2 shr 16) and $3f] or spfunction5[(right2 shr 8) and $3f] or spfunction7[right2 and $3f]); i:=i+loopinc; end; temp := left; left := right; right := temp; //unreverse left and right j:=j+3; end; //for either 1 or 3 iterations //move then each one bit to the right left := ((left shr 1) or (left shl 31)); right := ((right shr 1) or (right shl 31)); //now perform IP-1, which is IP in the opposite direction temp := ((left shr 1) xor right) and $55555555; right := right xor temp; left :=left xor (temp shl 1); temp := ((right shr 8) xor left) and $00ff00ff; left := left xor temp; right := right xor (temp shl 8); temp := ((right shr 2) xor left) and $33333333; left := left xor temp; right := right xor (temp shl 2); temp := ((left shr 16) xor right) and $0000ffff; right := right xor temp; left := left xor (temp shl 16); temp := ((left shr 4) xor right) and $0f0f0f0f; right := right xor temp; left := left xor (temp shl 4); //for Cipher Block Chaining mode, xor the message with the previous result if mode = 1 then if encrypt=1 then begin cbcleft := left; cbcright := right; end else begin left :=left xor cbcleft2; right := right xor cbcright2; end; tempresult := tempresult + chr(left shr 24) + chr((left shr 16) and $ff) + chr((left shr 8) and $ff) + chr(left and $ff) + chr(right shr 24) + chr((right shr 16) and $ff) + chr((right shr 8) and $ff) + chr(right and $ff); chunk := chunk + 8; if chunk = 512 then begin result := result + tempresult; tempresult := ''; chunk := 0; end; end; //for every 8 characters, or 64 bits in the message //return the result as an array result := result + tempresult; end; //end of des //des_createKeys //this takes as input a 64 bit key (even though only 56 bits are used) //as an array of 2 dwords, and returns 16 48 bit keys function des_createKeys(key:string):fdArray; const //declaring this locally speeds things up a bit pc2bytes0 :array[0..15] of dword= (0,$4,$20000000,$20000004,$10000,$10004,$20010000,$20010004,$200,$204,$20000200,$20000204,$10200,$10204,$20010200,$20010204); pc2bytes1 :array[0..15] of dword= (0,$1,$100000,$100001,$4000000,$4000001,$4100000,$4100001,$100,$101,$100100,$100101,$4000100,$4000101,$4100100,$4100101); pc2bytes2 :array[0..15] of dword= (0,$8,$800,$808,$1000000,$1000008,$1000800,$1000808,0,$8,$800,$808,$1000000,$1000008,$1000800,$1000808); pc2bytes3 :array[0..15] of dword= (0,$200000,$8000000,$8200000,$2000,$202000,$8002000,$8202000,$20000,$220000,$8020000,$8220000,$22000,$222000,$8022000,$8222000); pc2bytes4 :array[0..15] of dword= (0,$40000,$10,$40010,0,$40000,$10,$40010,$1000,$41000,$1010,$41010,$1000,$41000,$1010,$41010); pc2bytes5 :array[0..15] of dword= (0,$400,$20,$420,0,$400,$20,$420,$2000000,$2000400,$2000020,$2000420,$2000000,$2000400,$2000020,$2000420); pc2bytes6 :array[0..15] of dword= (0,$10000000,$80000,$10080000,$2,$10000002,$80002,$10080002,0,$10000000,$80000,$10080000,$2,$10000002,$80002,$10080002); pc2bytes7 :array[0..15] of dword= (0,$10000,$800,$10800,$20000000,$20010000,$20000800,$20010800,$20000,$30000,$20800,$30800,$20020000,$20030000,$20020800,$20030800); pc2bytes8 :array[0..15] of dword= (0,$40000,0,$40000,$2,$40002,$2,$40002,$2000000,$2040000,$2000000,$2040000,$2000002,$2040002,$2000002,$2040002); pc2bytes9 :array[0..15] of dword= (0,$10000000,$8,$10000008,0,$10000000,$8,$10000008,$400,$10000400,$408,$10000408,$400,$10000400,$408,$10000408); pc2bytes10 :array[0..15] of dword= (0,$20,0,$20,$100000,$100020,$100000,$100020,$2000,$2020,$2000,$2020,$102000,$102020,$102000,$102020); pc2bytes11 :array[0..15] of dword= (0,$1000000,$200,$1000200,$200000,$1200000,$200200,$1200200,$4000000,$5000000,$4000200,$5000200,$4200000,$5200000,$4200200,$5200200); pc2bytes12 :array[0..15] of dword= (0,$1000,$8000000,$8001000,$80000,$81000,$8080000,$8081000,$10,$1010,$8000010,$8001010,$80010,$81010,$8080010,$8081010); pc2bytes13 :array[0..15] of dword= (0,$4,$100,$104,0,$4,$100,$104,$1,$5,$101,$105,$1,$5,$101,$105); //now define the left shifts which need to be done shifts :array[0..15] of dword = (0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0); var iterations:integer; keys:fdArray; lefttemp, righttemp, temp:dword; m, n, j,i:integer; left,right:dword; begin //how many iterations (1 for des, 3 for triple des) if length(key) = 24 then iterations := 3 else iterations := 1; //stores the return keys setlength(keys,32 * iterations); //other variables m:=0;n:=0; for j:=0 to iterations-1 do //either 1 or 3 iterations begin left := (ord(key[m+1]) shl 24) or (ord(key[m+2]) shl 16) or (ord(key[m+3]) shl 8) or ord(key[m+4]); right := (ord(key[m+5]) shl 24) or (ord(key[m+6]) shl 16) or (ord(key[m+7]) shl 8) or ord(key[m+8]); m:=m+8; temp := ((left shr 4) xor right) and $0f0f0f0f; right :=right xor temp; left :=left xor (temp shl 4); temp := ((right shr 16) xor left) and $0000ffff; left := left xor temp; right :=right xor (temp shl 16); temp := ((left shr 2) xor right) and $33333333; right :=right xor temp; left := left xor (temp shl 2); temp := ((right shr 16) xor left) and $0000ffff; left :=left xor temp; right := right xor (temp shl 16); temp := ((left shr 1) xor right) and $55555555; right := right xor temp; left := left xor (temp shl 1); temp := ((right shr 8) xor left) and $00ff00ff; left :=left xor temp; right := right xor (temp shl 8); temp := ((left shr 1) xor right) and $55555555; right :=right xor temp; left := left xor (temp shl 1); //the right side needs to be shifted and to get the last four bits of the left side temp := (left shl 8) or ((right shr 20) and $000000f0); //left needs to be put upside down left := (right shl 24) or ((right shl 8) and $ff0000) or ((right shr 8) and $ff00) or ((right shr 24) and $f0); right := temp; //now go through and perform these shifts on the left and right keys for i:=low(shifts) to high(shifts) do begin //shift the keys either one or two bits to the left if shifts[i] > 0 then begin left := (left shl 2) or (left shr 26); right := (right shl 2) or (right shr 26); //left := left shl 0; //right:= right shl 0; end else begin left := (left shl 1) or (left shr 27); right := (right shl 1) or (right shr 27); //left := left shl 0; //right:= right shl 0; end; left := left and $fffffff0; right:= right and $fffffff0; //now apply PC-2, in such a way that E is easier when encrypting or decrypting //this conversion will look like PC-2 except only the last 6 bits of each byte are used //rather than 48 consecutive bits and the order of lines will be according to //how the S selection functions will be applied: S2, S4, S6, S8, S1, S3, S5, S7 lefttemp := pc2bytes0[left shr 28] or pc2bytes1[(left shr 24) and $f] or pc2bytes2[(left shr 20) and $f] or pc2bytes3[(left shr 16) and $f] or pc2bytes4[(left shr 12) and $f] or pc2bytes5[(left shr 8) and $f] or pc2bytes6[(left shr 4) and $f]; righttemp := pc2bytes7[right shr 28] or pc2bytes8[(right shr 24) and $f] or pc2bytes9[(right shr 20) and $f] or pc2bytes10[(right shr 16) and $f] or pc2bytes11[(right shr 12) and $f] or pc2bytes12[(right shr 8) and $f] or pc2bytes13[(right shr 4) and $f]; temp := ((righttemp shr 16) xor lefttemp) and $0000ffff; keys[n+0] := lefttemp xor temp; keys[n+1] := righttemp xor (temp shl 16); n:=n+2; end; end; //for each iterations //return the keys we've created Result := keys; end;//end of des_createKeys function StrToHex(Str:string):string; var i:integer; begin result := ''; for i := 1 to length(Str) do result := result + IntToHex(Ord(Str[i]),2); end; function HexToStr(Hex:string):string; var i:Integer; begin Result := ''; for i := 1 to length(Hex) div 2 do if IsInt('$' + Hex[i * 2 - 1] + Hex[i * 2]) then Result := Result + Chr(StrToInt('$' + Hex[i * 2 - 1] + Hex[i * 2])); end; function IsInt(Str:String):Boolean; begin result := True; try StrToInt(Str); except result := False end; end; {function EncryStr_3DES(Str, Key: String): String; var s ,StrResult, TempResult, Temp: String; I: Integer; begin if Length(Key) < 16 then while Length(Key) < 16 do Key := Key + Chr(0); s := EncryStrHex(Str, Copy(Key, 1, 8)); s := DecryStrHex(s, Copy(Key, 9, 8)); s := EncryStrHex(s, Copy(Key, 1, 8)); Result := s; end; } end.
相關推薦
DELPHI、PHP、C#通用DES編碼解碼單元 (DELPHI下使用的程式碼)
unit uDES; {*********************************************************} {* DELPHI、PHP、C#通用DES編碼解碼單元 *} {* blessed
Java、C++、Python、Ruby、PHP、C#和JavaScript的理解
皮膚 叔叔 保持 大學 學校 cti java 等等 無需 Java、C++、Python、Ruby、PHP、C#和JavaScript和日本動漫裏的那些大家熟悉的動漫人物結合起來。依據他們的身世、個人經歷來生動的表達各編程語言的發展歷程。原文內容例
大數據Hadoop Streaming編程實戰之C++、Php、Python
大數據編程 PHP語言 Python編程 C語言的應用 Streaming框架允許任何程序語言實現的程序在HadoopMapReduce中使用,方便已有程序向Hadoop平臺移植。因此可以說對於hadoop的擴展性意義重大。接下來我們分別使用C++、Php、Python語言實現HadoopWo
一文了解c/c++、java、JavaScript、php、Python的用途
BE 算法實現 分布式 底層 web服務器 物聯網 文檔 性能 爆發 編程語言是用來定義計算機程序的形式語言。它是一種被標準化的交流技巧,用來向計算機發出指令。一種計算機語言讓程序員能夠準確地定義計算機所需要使用的數據,並精確地定義在不同情況下所應當采取的行動。 C和C+
Java、C、C++、C#、php、python語言的內在特性及應用
當你選擇了網際網路這個行業也就意味著你要終身學習,想必現在的你一定驚歎網際網路的發展速度吧! 網際網路行業不比傳統行業,不是說你精通一門手藝就可以一輩子靠這個手藝來養活自己,網際網路行業沒有這回事,如果你想問有沒有哪一門語言學完之後可以養活自己一輩子,那麼抱歉,我想沒人能回答你。 網際網路發
Java、C、C+ +、PHP、Python分別用來開發什麼?一篇文章告訴你!
我自己是一名大資料架構師,目前辭職在做線上教育大資料講師,每天都會直播分享免費公開課,大家可以加群參加。以及我自己整理了一套最新的大資料學習系統教程,包括Hadoop,資料探勘,資料分析。送給正在學習大資料的小夥伴!這裡是大資料學習者聚集地,歡迎初學和進階中的小夥伴!加QQ群:5849001
C、C++、Java、JavaScript、PHP、Python、Ruby 這些語言分別主要用來開發什麼?
pansz,歡迎評論 此貼純科普用,以下僅僅說主要用途,其他用途限於篇幅關係省略之,不要鑽牛角尖。 C:系統底層,驅動程式,嵌入式底層,基礎服務程式。 C++:上層服務程式,應用API,大型3D遊戲。 Java:服務端應用程式,以及客戶端應用程式。 JS:在瀏覽器中執行的程式。 PHP:Web伺
C、C++、Java、JavaScript、PHP、Python、Ruby這些語言分別主要用來開發什麼?
c語言主要用於底層和驅動,編譯器開發 c語言高效底層,主要用於底層的開發,比如一些系統驅動;unix,linux系統和其上相關應用的開發; 有很多語言比如python、php、perl、ruby等都c語言開發的這些語言的核心庫,編譯器等開發都是c語言。比如鳥哥的php7的開發,就基
程式設計科普,C、C++、Java、PHP、Python分別用來開發什麼?
首先,我們先普及一下程式語言的基礎知識。用任何程式語言來開發程式,都是為了讓計算機幹活。比如編寫一篇文章,下載一首MP3等。 而計算機幹活的CPU只認識機器的指令。所以,儘管不同的程式語言差異極大,最後都得“翻譯”成CPU可以執行的機器指令。 理論上任何語言幹任
C++、PHP、Javascript、...、對lambda表示式的支援
lambda lambda表示式,也叫Closure(閉包),也叫匿名函式。由於其強大之處,幾乎被所有主流開發語言支援,本文試圖列出大部分語言中lambda表示式的樣例程式碼,後續持續更新。 PHP對lambda的支援 <?php $i = 12;
正則表示式總結(JavaScript、python、PHP、golang、C++、java、C#)之彙總
第一種:JavaScript(ES6) A:分隔符: 例如:reg=/\d(.)\1/g (切記:不能帶單引號和雙引號) X:ES6之新規則:s 修飾符:dotAll 模式 正則表示式中,點(.)是一個特殊字元,代表任意的單個字元,但是行終止符(line terminat
C、C++、Java、JavaScript、PHP、Python有啥區別,終於搞清楚了
tst 平臺 暴雪 一個 巨無霸 web瀏覽器 elastic 高效 開發 c語言主要用於底層和驅動,編譯器開發 c語言高效底層,主要用於底層的開發,比如一些系統驅動;unix,linux系統和其上相關應用的開發; 有很多語言比如python、php、perl、ruby
Java、Python、C++、PHP、JavaScript這5大程式語言,我究竟該選哪個?
很多朋友在後臺給我留言,問:現在這麼多程式語言,Python、Java、PHP、C++、JavaScript等,
代寫Json、php、Javascritp編程作業 Google Places API
end ont examples format num saving ats sam href 代寫Json、php、Javascritp編程作業 Google Places APITravel and Entertainment Search Server-side Sc
CentOS7上安裝並配置Nginx、PHP、MySql
是否 cnblogs cif 藍色 進程id 其中 ram 否則 usr 一、Nginx 1、安裝nginx yum install nginx 2、啟動nginx systemctl start nginx 除了systemctl start nginx之外,
gentoo安裝apache、nginx、php、mariadb、openssl(https)
alt 現在 bubuko 都是 ria https協議 圖片 裝系統 cat 本文用於記錄用gentoo安裝apache、nginx、php、mariadb、openssl(https),之前安裝花費了幾天時間,現記錄以供以後查閱,歡迎指點。 由於安裝的時候沒有做筆記,現
【Ubuntu】配置Apache、PHP、MySQL軟體開發三件套
今天,我在ubuntu下配置了一個Apache伺服器。通過Apache我們可以學習php網路程式設計,可以用它來部署自己本地的wordpress部落格,從而進一步通過網路和朋友交流。從此,你將深刻體會到網路帶個我們的神奇力量,至少我是這樣覺得的~~ 步驟一,安裝apache2
JavaScript、PHP、Python三種語言
一、變數 1.JavaScript var A = 1; var B = 'str'; 2.Python a = 123 b = 'str' 3.PHP $a = 123; $b = 'str'; 二、字串 1、字串合併操作:“ + ” 2、parseInt() 將數
阿里雲CentOS 7.3 裸機搭建 Apache、MySql、PHP、Node環境、並繫結域名
阿里雲CentOS 7.3 裸機搭建 Apache、MySql、PHP、Node境、並繫結域名 最近一直想在阿里雲申請一個伺服器,可以在上面跑一些服務,輸入域名訪問,那種感覺肯定很不一樣。所以就花學生價買了一年,還是挺划算的。 域名備案花了挺長時間,又上傳照片又打電話核實的挺麻煩的,不過
Mac 平臺搭建PHP開發環境:Nginx、PHP、MySQL.md
之前懶得配置mac的開發環境,都是用的一個叫MAMP的整合包,簡單的專案就用那個,複雜的就全部用hg甩到ubuntu的虛擬機器裡去執行,時間一長,就覺得很麻煩,所以只能自己動手配置下mac的開發環境了。 那我就不廢話了,直接開始安裝步驟了吧!我怕再囉嗦,你們的板磚就飛過來了v。