亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? des.pas

?? 基于delphi開發的DES加密算法
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);

  FINAL_PERMUTATION (right, work, left);
  WRITE_64BIT_DATA (PChar(_to), right, left);

  Result := 0;
end;

function tripledes_set2keys(ctx: P_tripledes_ctx; key1, key2: PByte): Integer;
var
  I: Integer;
begin
  des_key_schedule (key1, @ctx.encrypt_subkeys);
  des_key_schedule (key2, @(ctx.decrypt_subkeys[32]));

  I := 0;
  while (i < 32) do
  begin
      ctx.decrypt_subkeys[i] := ctx.encrypt_subkeys[30-i];
      ctx.decrypt_subkeys[i+1]  := ctx.encrypt_subkeys[31-i];
      ctx.encrypt_subkeys[i+32] := ctx.decrypt_subkeys[62-i];
      ctx.encrypt_subkeys[i+33] := ctx.decrypt_subkeys[63-i];
      ctx.encrypt_subkeys[i+64] := ctx.encrypt_subkeys[i];
      ctx.encrypt_subkeys[i+65] := ctx.encrypt_subkeys[i+1];
      ctx.decrypt_subkeys[i+64] := ctx.decrypt_subkeys[i];
      ctx.decrypt_subkeys[i+65] := ctx.decrypt_subkeys[i+1];
    Inc(i, 2);
  end;
  Result := 0;
end;

function tripledes_set3keys(ctx: P_tripledes_ctx; key1, key2, key3: PByte): Integer;
var
  I: Integer;
begin
  des_key_schedule (key1, @ctx.encrypt_subkeys);
  des_key_schedule (key2, @(ctx.decrypt_subkeys[32]));
  des_key_schedule (key3, @(ctx.encrypt_subkeys[64]));
  I := 0;
  while (i < 32) do
  begin
    ctx.decrypt_subkeys[i] := ctx.encrypt_subkeys[94-i];
    ctx.decrypt_subkeys[i+1]  := ctx.encrypt_subkeys[95-i];

    ctx.encrypt_subkeys[i+32] := ctx.decrypt_subkeys[62-i];
    ctx.encrypt_subkeys[i+33] := ctx.decrypt_subkeys[63-i];

    ctx.decrypt_subkeys[i+64] := ctx.encrypt_subkeys[30-i];
    ctx.decrypt_subkeys[i+65] := ctx.encrypt_subkeys[31-i];
    Inc(i, 2);
  end;
  Result := 0;
end;

procedure tripledes_ecb_crypt(ctx: P_tripledes_ctx; const _from: PByte; _to: PByte; mode: Integer);
var
  left, right, work: DWORD;
  keys: PDWORD;
  data: PChar;
begin
  if mode <> 0 then keys := @ctx.decrypt_subkeys
  else keys := @ctx.encrypt_subkeys;

  data := PChar(_from);
  READ_64BIT_DATA (data, left, right);
  INITIAL_PERMUTATION (left, work, right);

  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);

  DES_ROUND(left, right, work, keys); DES_ROUND(right, left, work, keys);
  DES_ROUND(left, right, work, keys); DES_ROUND(right, left, work, keys);
  DES_ROUND(left, right, work, keys); DES_ROUND(right, left, work, keys);
  DES_ROUND(left, right, work, keys); DES_ROUND(right, left, work, keys);
  DES_ROUND(left, right, work, keys); DES_ROUND(right, left, work, keys);
  DES_ROUND(left, right, work, keys); DES_ROUND(right, left, work, keys);
  DES_ROUND(left, right, work, keys); DES_ROUND(right, left, work, keys);
  DES_ROUND(left, right, work, keys); DES_ROUND(right, left, work, keys);

  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);
  DES_ROUND(right, left, work, keys); DES_ROUND(left, right, work, keys);

  FINAL_PERMUTATION (right, work, left);
  WRITE_64BIT_DATA (PChar(_to), right, left);
end;

function is_weak_key(const key: PByte): Integer;
var
  I, left, right, middle, cmp_result: Integer;
  work: array [0..7] of Byte;
  _key: PChar;
begin
  _key := PChar(key);
  for i := 0 to 7 do work[i] := Byte(_key[i]) and $fe;

  left := 0; right := 63;
  while(left <= right) do
  begin
    middle := (left + right) div 2;
    cmp_result := working_memcmp(PChar(@work[0]), PChar(@weak_keys[middle]), 8);
    if (cmp_result <> 0) then
    begin
      Result := -1;
      Exit;
    end;
    if (cmp_result > 0) then left := middle + 1
    else right := middle - 1;
  end;
  Result := 0;
end;

function memcmp(const a, b; n: Integer): Boolean;
var
  _a, _b: PChar;
  I: Integer;
begin
  Result := False;
  _a := @a; _b := @b;
  for I := 0 to n do
  begin
    if (_a^ <> _b^) then
    begin
      Result := False;
      Exit;
    end else Result := True;
  end;
end;

procedure DO_PERMUTATION(var a, temp, b: DWORD; const offset, mask: DWORD);
begin
  temp := ((a shr offset) xor b) and mask;
  b := temp xor b;
  a := (temp shl offset) xor a;
end;

procedure INITIAL_PERMUTATION(var left, temp, right: DWORD);
begin
  DO_PERMUTATION(left, temp, right, 4, $0f0f0f0f);
  DO_PERMUTATION(left, temp, right, 16, $0000ffff);
  DO_PERMUTATION(right, temp, left, 2, $33333333);
  DO_PERMUTATION(right, temp, left, 8, $00ff00ff);
  DO_PERMUTATION(left, temp, right, 1, $55555555);
end;

procedure FINAL_PERMUTATION(var left, temp, right: DWORD);
begin
  DO_PERMUTATION(left, temp, right, 1, $55555555);
  DO_PERMUTATION(right, temp, left, 8, $00ff00ff);
  DO_PERMUTATION(right, temp, left, 2, $33333333);
  DO_PERMUTATION(left, temp, right, 16, $0000ffff);
  DO_PERMUTATION(left, temp, right, 4, $0f0f0f0f);
end;

procedure DES_ROUND(var _from, _to, work: DWORD; var subkey: PDWORD);
begin
  work := ((_from shl 1) or (_from shr 31)) xor subkey^; Inc(subkey);
  _to := _to xor (sbox8[work and $3f]);
  _to := _to xor (sbox6[(work shr 8) and $3f]);
  _to := _to xor (sbox4[(work shr 16) and $3f]);
  _to := _to xor (sbox2[(work shr 24) and $3f]);

  work := ((_from shr 3) or (_from shl 29)) xor subkey^; Inc(subkey);
  _to := _to xor (sbox7[work and $3f]);
  _to := _to xor (sbox5[(work shr 8) and $3f]);
  _to := _to xor (sbox3[(work shr 16) and $3f]);
  _to := _to xor (sbox1[(work shr 24) and $3f]);
end;

procedure READ_64BIT_DATA(var data: PChar; var left, right: DWORD);
begin
  left := (DWORD(Byte(data[0]) shl 24)) or  (DWORD(Byte(data[1]) shl 16))
    or (DWORD(Byte(data[2]) shl 8) or (DWORD(Byte(data[3]))));
  right := (DWORD(Byte(data[4]) shl 24)) or  (DWORD(Byte(data[5]) shl 16))
    or (DWORD(Byte(data[6]) shl 8) or (DWORD(Byte(data[7]))));
end;

procedure WRITE_64BIT_DATA(var data: PChar; left, right: DWORD);
begin
  data[0] := Char((left shr 24) and $ff);
  data[1] := Char((left shr 16) and $ff);
  data[2] := Char((left shr 8) and $ff);
  data[3] := Char(left and $ff);
  data[4] := Char((right shr 24) and $ff);
  data[5] := Char((right shr 16) and $ff);
  data[6] := Char((right shr 8) and $ff);
  data[7] := Char(right and $ff);
end;

function selftest(): string;
const
  key: array [0..7] of Byte = ($55, $55, $55,$55, $55, $55, $55, $55);
  input: array [0..7] of Byte = ($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF);
  aresult: array [0..7] of Byte = ($24, $6e, $9d, $b9, $c5, $50, $38, $1a);
var
  I: Integer;
  temp1, temp2, temp3: array [0..7] of Byte;
  des: _des_ctx;
begin
  for I := 0 to 63 do
  begin
    des_setkey (@des, @key);
    des_ecb_crypt (@des, @input, @temp1, 0);
    des_ecb_crypt (@des, @temp1, @temp2, 0);
    des_setkey (@des, @temp2);


des_ecb_crypt (@des, @temp1, @temp3, 1);
    CopyMemory(@key, @temp3, 8);
    CopyMemory(@input, @temp1, 8);
  end;
  if not (memcmp (temp3, aresult, 8)) then
    Result := 'DES maintenance test failed.'
  else
    Result := 'DES ok';
end;

function selftest3(): string;
const
  input3: array [0..7] of Byte = ($fe, $dc, $ba, $98, $76, $54, $32, $10);
  key1: array [0..7] of Byte = ($12, $34, $56, $78, $9a, $bc, $de, $f0);
  key2: array [0..7] of Byte = ($11, $22, $33, $44, $ff, $aa, $cc, $dd);
  result3: array [0..7] of Byte = ($7b, $38, $3b, $23, $a2, $7d, $26, $d3);
var
  des3: _tripledes_ctx;
  I: Integer;
begin
  for I := 0 to 15 do
  begin
    tripledes_set2keys (@des3, @key1, @key2);
    tripledes_ecb_crypt (@des3, @input3, @key1, 0);
    tripledes_ecb_crypt (@des3, @input3, @key2, 1);
    tripledes_set3keys (@des3, @key1, @input3, @key2);
    tripledes_ecb_crypt (@des3, @input3, @input3, 0);
  end;
  if not (memcmp (input3, result3, 8)) then
      Result := 'TRIPLE-DES test failed.'
  else
    Result := 'TRIPLE-DES ok';
end;

end.

------------
//測試
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(selftest());
  ShowMessage(selftest3());
end;

function DES_EnCrypt(const aStr, acKey: string): string;
var
  key, work_temp, temp1, temp2, temp3: array [0..7] of Byte;
  work_s, key_s: string;
  I, iLen, J: Integer;
  des: _des_ctx;
begin
  Result := '';
  if (aStr = '') or (acKey = '') then Exit;
  iLen := Length(aStr);
  work_s := aStr;
  if (iLen mod 8) <> 0 then
  begin
    SetLength(work_s, iLen + (8 - iLen mod 8));
    FillMemory(@work_s[iLen + 1], 8 - iLen mod 8, 0);
    iLen := Length(work_s);
  end;
  for J := 1 to iLen div 8 do
  begin
    key_s := Copy(acKey, 1, 8);
    CopyMemory(@key, @key_s[1], Length(key_s));
    FillMemory(@key[Length(key_s)], 8 - Length(key_s), 0);
    CopyMemory(@work_temp, @work_s[J * 8 -7], 8);
    for I := 0 to 63 do
    begin
      des_setkey (@des, @key);
      des_ecb_crypt (@des, @work_temp, @temp1, 0);
      des_ecb_crypt (@des, @temp1, @temp2, 0);
      des_setkey (@des, @temp2);
      des_ecb_crypt (@des, @temp1, @temp3, 1);
      CopyMemory(@key, @temp3, 8);
      CopyMemory(@work_temp, @temp1, 8);
    end;
    for I := 0 to 7 do
    begin
      Result := Result + Format('%.2X', [temp3[I]]);// Chr(temp3[I]);
    end;
  end;
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人aaaa免费全部观看| 国产成人av电影| 亚洲一区二区三区爽爽爽爽爽 | 3d动漫精品啪啪一区二区竹菊| 成人av资源下载| 国产成人av一区二区| 国产一区二区三区蝌蚪| 国产尤物一区二区| 国产福利一区二区三区视频在线| 国模无码大尺度一区二区三区| 激情偷乱视频一区二区三区| 国产在线精品一区二区| 成人综合在线视频| 91亚洲精华国产精华精华液| 欧美性淫爽ww久久久久无| 欧美精品久久99久久在免费线| 欧美精品第1页| 精品久久人人做人人爽| 国产欧美一区二区精品性色| 国产精品欧美精品| 最新成人av在线| 亚洲va欧美va人人爽| 久久国产尿小便嘘嘘| 成人深夜视频在线观看| 欧美中文一区二区三区| 精品处破学生在线二十三| 国产精品国模大尺度视频| 日韩主播视频在线| 国产夫妻精品视频| 一本大道综合伊人精品热热 | 精品成人免费观看| 一区二区中文视频| 日韩av中文字幕一区二区三区| 国产麻豆精品95视频| 色婷婷狠狠综合| 欧美videos中文字幕| 亚洲色图视频网站| 看国产成人h片视频| 91丨porny丨在线| 精品女同一区二区| 亚洲精品国产第一综合99久久| 日韩高清一区在线| 成人性视频网站| 日韩美女视频在线| 亚洲制服丝袜在线| 波多野结衣精品在线| 日韩手机在线导航| 亚洲电影一区二区| 波多野结衣亚洲| 久久久精品免费网站| 婷婷综合久久一区二区三区| 99精品国产视频| 久久五月婷婷丁香社区| 午夜精品福利一区二区蜜股av| 成人久久久精品乱码一区二区三区| 欧美日韩国产精品自在自线| 中文字幕字幕中文在线中不卡视频| 蜜臀av性久久久久蜜臀av麻豆| 色婷婷久久一区二区三区麻豆| 国产精品视频线看| 国产传媒一区在线| 久久久蜜桃精品| 久草这里只有精品视频| 欧美一卡在线观看| 爽好久久久欧美精品| 欧美性做爰猛烈叫床潮| 亚洲精品乱码久久久久久黑人| 99精品国产热久久91蜜凸| 国产精品久久久久久久久免费樱桃 | 9色porny自拍视频一区二区| 欧美一区二区三区影视| 亚洲成人精品影院| 精品视频1区2区| 天堂久久一区二区三区| 欧美福利电影网| 免费视频一区二区| 欧美一区二区三区在线看| 久久激情五月激情| 26uuu另类欧美亚洲曰本| 精品一区二区三区视频在线观看| 日韩一区二区免费电影| 久久99深爱久久99精品| 久久久精品国产免费观看同学| 国产美女主播视频一区| 欧美激情综合在线| 一本久道久久综合中文字幕| 亚洲一区二区三区爽爽爽爽爽 | 国产亲近乱来精品视频| 成人久久久精品乱码一区二区三区 | 国产在线精品一区在线观看麻豆| 日韩欧美专区在线| 国产激情一区二区三区| 国产精品护士白丝一区av| 欧美色综合天天久久综合精品| 婷婷丁香激情综合| 久久久亚洲精华液精华液精华液| 成人av免费在线播放| 亚洲第一福利一区| 欧美精品一区在线观看| caoporm超碰国产精品| 亚洲图片欧美色图| 久久午夜电影网| 91福利国产成人精品照片| 免费人成网站在线观看欧美高清| 国产婷婷精品av在线| 欧美亚洲国产一区二区三区va | 99国产欧美另类久久久精品| 亚洲精品美国一| 精品国产乱码91久久久久久网站| 成人国产精品免费网站| 日韩精品一级二级| 亚洲国产精华液网站w| 在线播放日韩导航| 不卡的电影网站| 美美哒免费高清在线观看视频一区二区 | 精品久久久久久久久久久久久久久久久 | 久久人人97超碰com| 欧美最新大片在线看 | 国产午夜久久久久| 欧美三级在线播放| 福利一区二区在线观看| 日本美女一区二区三区视频| 中文字幕成人在线观看| 日韩欧美一区中文| 欧美在线观看一区二区| 成人精品免费视频| 看电视剧不卡顿的网站| 亚洲电影在线播放| 日韩中文字幕91| 亚洲特级片在线| 久久久久久久精| 欧美草草影院在线视频| 欧美午夜精品理论片a级按摩| 国产精品77777| 极品少妇xxxx精品少妇偷拍| 亚洲一级在线观看| 亚洲人成精品久久久久久| 久久久久久久久久久黄色| 日韩一级欧美一级| 欧美一区永久视频免费观看| 欧美久久一二三四区| 日本精品免费观看高清观看| 99久久久久久| av资源站一区| 成人动漫一区二区在线| 成人久久视频在线观看| 成人黄色一级视频| 成人av免费网站| 91视视频在线观看入口直接观看www| 国产福利精品导航| 成人一级黄色片| caoporen国产精品视频| 91论坛在线播放| 在线观看日韩电影| 欧美三区在线观看| 欧美一区三区二区| 欧美tk—视频vk| 欧美xxxx老人做受| 久久嫩草精品久久久精品一| 精品国产免费久久| 国产精品伦一区| 亚洲男女一区二区三区| 亚洲国产欧美日韩另类综合| 亚洲一区二区3| 亚洲777理论| 久久精品国产精品亚洲红杏| 国产一区二区主播在线| 国产成人一级电影| 色综合欧美在线| 欧美精三区欧美精三区| 日韩精品一区二区三区三区免费| 精品国产免费一区二区三区香蕉| 国产三级精品视频| 亚洲日本欧美天堂| 日韩极品在线观看| 国产99精品国产| 欧美精品乱码久久久久久按摩| 欧美一级艳片视频免费观看| 久久色在线观看| 椎名由奈av一区二区三区| 日韩综合小视频| 成人av电影免费观看| 欧美日韩电影一区| 国产精品久久久久久久午夜片| 亚洲一区二区三区中文字幕 | 成人a区在线观看| 欧美少妇bbb| 国产清纯美女被跳蛋高潮一区二区久久w | 91免费版pro下载短视频| 国产欧美日韩另类视频免费观看| 日韩一区中文字幕| 蜜臀av国产精品久久久久| 高清久久久久久| 日韩一区二区在线看片| 国产精品久久久久久久久果冻传媒| 亚洲成国产人片在线观看| 成人免费观看男女羞羞视频| 91精品国产aⅴ一区二区| 亚洲四区在线观看| 国产馆精品极品|