⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idotpcalculator.pas

📁 photo.163.com 相册下载器 多线程下载
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    'LUST', 'LYLE', 'LYNN', 'LYON', 'LYRA', 'MACE', 'MADE', 'MAGI', {do not localize}
    'MAID', 'MAIL', 'MAIN', 'MAKE', 'MALE', 'MALI', 'MALL', 'MALT', {do not localize}
    'MANA', 'MANN', 'MANY', 'MARC', 'MARE', 'MARK', 'MARS', 'MART', {do not localize}
    'MARY', 'MASH', 'MASK', 'MASS', 'MAST', 'MATE', 'MATH', 'MAUL', {do not localize}
    'MAYO', 'MEAD', 'MEAL', 'MEAN', 'MEAT', 'MEEK', 'MEET', 'MELD', {do not localize}
    'MELT', 'MEMO', 'MEND', 'MENU', 'MERT', 'MESH', 'MESS', 'MICE', {do not localize}
    'MIKE', 'MILD', 'MILE', 'MILK', 'MILL', 'MILT', 'MIMI', 'MIND', {do not localize}
    'MINE', 'MINI', 'MINK', 'MINT', 'MIRE', 'MISS', 'MIST', 'MITE', {do not localize}
    'MITT', 'MOAN', 'MOAT', 'MOCK', 'MODE', 'MOLD', 'MOLE', 'MOLL', {do not localize}
    'MOLT', 'MONA', 'MONK', 'MONT', 'MOOD', 'MOON', 'MOOR', 'MOOT', {do not localize}
    'MORE', 'MORN', 'MORT', 'MOSS', 'MOST', 'MOTH', 'MOVE', 'MUCH', {do not localize}
    'MUCK', 'MUDD', 'MUFF', 'MULE', 'MULL', 'MURK', 'MUSH', 'MUST', {do not localize}
    'MUTE', 'MUTT', 'MYRA', 'MYTH', 'NAGY', 'NAIL', 'NAIR', 'NAME', {do not localize}
    'NARY', 'NASH', 'NAVE', 'NAVY', 'NEAL', 'NEAR', 'NEAT', 'NECK', {do not localize}
    'NEED', 'NEIL', 'NELL', 'NEON', 'NERO', 'NESS', 'NEST', 'NEWS', {do not localize}
    'NEWT', 'NIBS', 'NICE', 'NICK', 'NILE', 'NINA', 'NINE', 'NOAH', {do not localize}
    'NODE', 'NOEL', 'NOLL', 'NONE', 'NOOK', 'NOON', 'NORM', 'NOSE', {do not localize}
    'NOTE', 'NOUN', 'NOVA', 'NUDE', 'NULL', 'NUMB', 'OATH', 'OBEY', {do not localize}
    'OBOE', 'ODIN', 'OHIO', 'OILY', 'OINT', 'OKAY', 'OLAF', 'OLDY', {do not localize}
    'OLGA', 'OLIN', 'OMAN', 'OMEN', 'OMIT', 'ONCE', 'ONES', 'ONLY', {do not localize}
    'ONTO', 'ONUS', 'ORAL', 'ORGY', 'OSLO', 'OTIS', 'OTTO', 'OUCH', {do not localize}
    'OUST', 'OUTS', 'OVAL', 'OVEN', 'OVER', 'OWLY', 'OWNS', 'QUAD', {do not localize}
    'QUIT', 'QUOD', 'RACE', 'RACK', 'RACY', 'RAFT', 'RAGE', 'RAID', {do not localize}
    'RAIL', 'RAIN', 'RAKE', 'RANK', 'RANT', 'RARE', 'RASH', 'RATE', {do not localize}
    'RAVE', 'RAYS', 'READ', 'REAL', 'REAM', 'REAR', 'RECK', 'REED', {do not localize}
    'REEF', 'REEK', 'REEL', 'REID', 'REIN', 'RENA', 'REND', 'RENT', {do not localize}
    'REST', 'RICE', 'RICH', 'RICK', 'RIDE', 'RIFT', 'RILL', 'RIME', {do not localize}
    'RING', 'RINK', 'RISE', 'RISK', 'RITE', 'ROAD', 'ROAM', 'ROAR', {do not localize}
    'ROBE', 'ROCK', 'RODE', 'ROIL', 'ROLL', 'ROME', 'ROOD', 'ROOF', {do not localize}
    'ROOK', 'ROOM', 'ROOT', 'ROSA', 'ROSE', 'ROSS', 'ROSY', 'ROTH', {do not localize}
    'ROUT', 'ROVE', 'ROWE', 'ROWS', 'RUBE', 'RUBY', 'RUDE', 'RUDY', {do not localize}
    'RUIN', 'RULE', 'RUNG', 'RUNS', 'RUNT', 'RUSE', 'RUSH', 'RUSK', {do not localize}
    'RUSS', 'RUST', 'RUTH', 'SACK', 'SAFE', 'SAGE', 'SAID', 'SAIL', {do not localize}
    'SALE', 'SALK', 'SALT', 'SAME', 'SAND', 'SANE', 'SANG', 'SANK', {do not localize}
    'SARA', 'SAUL', 'SAVE', 'SAYS', 'SCAN', 'SCAR', 'SCAT', 'SCOT', {do not localize}
    'SEAL', 'SEAM', 'SEAR', 'SEAT', 'SEED', 'SEEK', 'SEEM', 'SEEN', {do not localize}
    'SEES', 'SELF', 'SELL', 'SEND', 'SENT', 'SETS', 'SEWN', 'SHAG', {do not localize}
    'SHAM', 'SHAW', 'SHAY', 'SHED', 'SHIM', 'SHIN', 'SHOD', 'SHOE', {do not localize}
    'SHOT', 'SHOW', 'SHUN', 'SHUT', 'SICK', 'SIDE', 'SIFT', 'SIGH', {do not localize}
    'SIGN', 'SILK', 'SILL', 'SILO', 'SILT', 'SINE', 'SING', 'SINK', {do not localize}
    'SIRE', 'SITE', 'SITS', 'SITU', 'SKAT', 'SKEW', 'SKID', 'SKIM', {do not localize}
    'SKIN', 'SKIT', 'SLAB', 'SLAM', 'SLAT', 'SLAY', 'SLED', 'SLEW', {do not localize}
    'SLID', 'SLIM', 'SLIT', 'SLOB', 'SLOG', 'SLOT', 'SLOW', 'SLUG', {do not localize}
    'SLUM', 'SLUR', 'SMOG', 'SMUG', 'SNAG', 'SNOB', 'SNOW', 'SNUB', {do not localize}
    'SNUG', 'SOAK', 'SOAR', 'SOCK', 'SODA', 'SOFA', 'SOFT', 'SOIL', {do not localize}
    'SOLD', 'SOME', 'SONG', 'SOON', 'SOOT', 'SORE', 'SORT', 'SOUL', {do not localize}
    'SOUR', 'SOWN', 'STAB', 'STAG', 'STAN', 'STAR', 'STAY', 'STEM', {do not localize}
    'STEW', 'STIR', 'STOW', 'STUB', 'STUN', 'SUCH', 'SUDS', 'SUIT', {do not localize}
    'SULK', 'SUMS', 'SUNG', 'SUNK', 'SURE', 'SURF', 'SWAB', 'SWAG', {do not localize}
    'SWAM', 'SWAN', 'SWAT', 'SWAY', 'SWIM', 'SWUM', 'TACK', 'TACT', {do not localize}
    'TAIL', 'TAKE', 'TALE', 'TALK', 'TALL', 'TANK', 'TASK', 'TATE', {do not localize}
    'TAUT', 'TEAL', 'TEAM', 'TEAR', 'TECH', 'TEEM', 'TEEN', 'TEET', {do not localize}
    'TELL', 'TEND', 'TENT', 'TERM', 'TERN', 'TESS', 'TEST', 'THAN', {do not localize}
    'THAT', 'THEE', 'THEM', 'THEN', 'THEY', 'THIN', 'THIS', 'THUD', {do not localize}
    'THUG', 'TICK', 'TIDE', 'TIDY', 'TIED', 'TIER', 'TILE', 'TILL', {do not localize}
    'TILT', 'TIME', 'TINA', 'TINE', 'TINT', 'TINY', 'TIRE', 'TOAD', {do not localize}
    'TOGO', 'TOIL', 'TOLD', 'TOLL', 'TONE', 'TONG', 'TONY', 'TOOK', {do not localize}
    'TOOL', 'TOOT', 'TORE', 'TORN', 'TOTE', 'TOUR', 'TOUT', 'TOWN', {do not localize}
    'TRAG', 'TRAM', 'TRAY', 'TREE', 'TREK', 'TRIG', 'TRIM', 'TRIO', {do not localize}
    'TROD', 'TROT', 'TROY', 'TRUE', 'TUBA', 'TUBE', 'TUCK', 'TUFT', {do not localize}
    'TUNA', 'TUNE', 'TUNG', 'TURF', 'TURN', 'TUSK', 'TWIG', 'TWIN', {do not localize}
    'TWIT', 'ULAN', 'UNIT', 'URGE', 'USED', 'USER', 'USES', 'UTAH', {do not localize}
    'VAIL', 'VAIN', 'VALE', 'VARY', 'VASE', 'VAST', 'VEAL', 'VEDA', {do not localize}
    'VEIL', 'VEIN', 'VEND', 'VENT', 'VERB', 'VERY', 'VETO', 'VICE', {do not localize}
    'VIEW', 'VINE', 'VISE', 'VOID', 'VOLT', 'VOTE', 'WACK', 'WADE', {do not localize}
    'WAGE', 'WAIL', 'WAIT', 'WAKE', 'WALE', 'WALK', 'WALL', 'WALT', {do not localize}
    'WAND', 'WANE', 'WANG', 'WANT', 'WARD', 'WARM', 'WARN', 'WART', {do not localize}
    'WASH', 'WAST', 'WATS', 'WATT', 'WAVE', 'WAVY', 'WAYS', 'WEAK', {do not localize}
    'WEAL', 'WEAN', 'WEAR', 'WEED', 'WEEK', 'WEIR', 'WELD', 'WELL', {do not localize}
    'WELT', 'WENT', 'WERE', 'WERT', 'WEST', 'WHAM', 'WHAT', 'WHEE', {do not localize}
    'WHEN', 'WHET', 'WHOA', 'WHOM', 'WICK', 'WIFE', 'WILD', 'WILL', {do not localize}
    'WIND', 'WINE', 'WING', 'WINK', 'WINO', 'WIRE', 'WISE', 'WISH', {do not localize}
    'WITH', 'WOLF', 'WONT', 'WOOD', 'WOOL', 'WORD', 'WORE', 'WORK', {do not localize}
    'WORM', 'WORN', 'WOVE', 'WRIT', 'WYNN', 'YALE', 'YANG', 'YANK', {do not localize}
    'YARD', 'YARN', 'YAWL', 'YAWN', 'YEAH', 'YEAR', 'YELL', 'YOGA', {do not localize}
    'YOKE');                                                        {do not localize}

function ReverseEndian(const AInt: LongWord): LongWord; overload;
begin
  result := ((AInt and $FF000000) shr 24) or
    ((AInt and $00FF0000) shr 8) or
    ((AInt and $0000FF00) shl 8) or
    ((AInt and $000000FF) shl 24);
end;

function ReverseEndian(const AInt64: int64): int64; overload;
begin
  result := ((AInt64 and $00000000FF000000) shr 24) or
    ((AInt64 and $0000000000FF0000) shr 8) or
    ((AInt64 and $000000000000FF00) shl 8) or
    ((AInt64 and $00000000000000FF) shl 24) or
    ((AInt64 and $FF00000000000000) shr 24) or
    ((AInt64 and $00FF000000000000) shr 8) or
    ((AInt64 and $0000FF0000000000) shl 8) or
    ((AInt64 and $000000FF00000000) shl 24);
end;

class function TIdOTPCalculator.ToHex(const AKey: int64): string;
begin
  result := IntToHex(AKey, 16);
end;

class function TIdOTPCalculator.ToSixWordFormat(const AKey: int64): string;

  function GetBits(const Afrom: int64; const AStart: integer; const ACount: integer): word;
  begin
    result := (Afrom shl AStart) shr (64 - ACount);
  end;

var
  i: integer;
  LParity: integer;
begin
  for i := 0 to 4 do
    result := result + Dictionary[GetBits(AKey, i * 11, 11)] + ' ';

  LParity := 0;
  for i := 0 to 32 do
    inc(LParity, GetBits(AKey, i * 2, 2));
  LParity := LParity and 3;
  result := result + Dictionary[GetBits(AKey, 55, 11) + LParity];
end;

class function TIdOTPCalculator.GenerateKeyMD4(const ASeed: string; const APassword: string; const ACount: integer): int64;
var
  LMD4: TIdHashMessageDigest4;
  LMD4Hash: T4x4LongWordRecord;
  LTmpMemStream: TMemoryStream;
  I: integer;
  L64Bit: int64;
  LTempLongWord: LongWord;
begin
  LMD4 := TIdHashMessageDigest4.Create;
  try
    LMD4Hash := LMD4.HashValue(lowercase(ASeed) + APassword);
    L64Bit := (Int64(LMD4Hash[0] xor LMD4Hash[2]) shl 32) or (LMD4Hash[1] xor LMD4Hash[3]);

    for i := 1 to ACount do begin

      LTmpMemStream := TMemoryStream.Create;
      try
        L64Bit := ReverseEndian(L64Bit);

        LTempLongWord := (L64Bit shr 32);
        LTempLongWord := ReverseEndian(LTempLongWord);
        LTmpMemStream.write(LTempLongWord, 4);

        LTempLongWord := (L64Bit and $FFFFFFFF);
        LTempLongWord := ReverseEndian(LTempLongWord);
        LTmpMemStream.write(LTempLongWord, 4);

        LTmpMemStream.Position := 0;
        LMD4Hash := LMD4.HashValue(LTmpMemStream);
        L64Bit := (Int64(LMD4Hash[0] xor LMD4Hash[2]) shl 32) or (LMD4Hash[1] xor LMD4Hash[3]);
      finally
        LTmpMemStream.free;
      end
    end;
  finally
    LMD4.free;
  end;
  Result := ReverseEndian(L64Bit);
end;

class function TIdOTPCalculator.GenerateKeyMD5(const ASeed: string; const APassword: string; const ACount: integer): int64;
var
  LMD5: TIdHashMessageDigest5;
  LMD5Hash: T4x4LongWordRecord;
  LTmpMemStream: TMemoryStream;
  I: integer;
  L64Bit: int64;
  LTempLongWord: LongWord;
begin
  LMD5 := TIdHashMessageDigest5.Create;
  try
    LMD5Hash := LMD5.HashValue(lowercase(ASeed) + APassword);
    L64Bit := (Int64(LMD5Hash[0] xor LMD5Hash[2]) shl 32) or (LMD5Hash[1] xor LMD5Hash[3]);

    for i := 1 to ACount do begin

      LTmpMemStream := TMemoryStream.Create;
      try
        L64Bit := ReverseEndian(L64Bit);

        LTempLongWord := (L64Bit shr 32);
        LTempLongWord := ReverseEndian(LTempLongWord);
        LTmpMemStream.write(LTempLongWord, 4);

        LTempLongWord := (L64Bit and $FFFFFFFF);
        LTempLongWord := ReverseEndian(LTempLongWord);
        LTmpMemStream.write(LTempLongWord, 4);

        LTmpMemStream.Position := 0;
        LMD5Hash := LMD5.HashValue(LTmpMemStream);
        L64Bit := (Int64(LMD5Hash[0] xor LMD5Hash[2]) shl 32) or (LMD5Hash[1] xor LMD5Hash[3]);
      finally
        LTmpMemStream.free;
      end
    end;
  finally
    LMD5.free;
  end;
  Result := ReverseEndian(L64Bit);
end;

class function TIdOTPCalculator.GenerateKeySHA1(const ASeed: string; const APassword: string; const ACount: integer): int64;
var
  LSHA1: TIdHashSHA1;
  LSHA1Hash: T5x4LongWordRecord;
  LTmpMemStream: TMemoryStream;
  I: integer;
  L64Bit: int64;
  LTempLongWord: LongWord;
begin
  LSHA1 := TIdHashSHA1.Create;
  try
    LSHA1Hash := LSHA1.HashValue(lowercase(ASeed) + APassword);
    L64Bit := (Int64(LSHA1Hash[0] xor LSHA1Hash[2] xor LSHA1Hash[4]) shl 32) or (LSHA1Hash[1] xor LSHA1Hash[3]);

    for i := 1 to ACount do begin

      LTmpMemStream := TMemoryStream.Create;
      try
        L64Bit := ReverseEndian(L64Bit);

        LTempLongWord := (L64Bit shr 32);
        LTmpMemStream.write(LTempLongWord, 4);

        LTempLongWord := (L64Bit and $FFFFFFFF);
        LTmpMemStream.write(LTempLongWord, 4);

        LTmpMemStream.Position := 0;
        LSHA1Hash := LSHA1.HashValue(LTmpMemStream);
        L64Bit := (Int64(LSHA1Hash[0] xor LSHA1Hash[2] xor LSHA1Hash[4]) shl 32) or (LSHA1Hash[1] xor LSHA1Hash[3]);
      finally
        LTmpMemStream.free;
      end
    end;
  finally
    LSHA1.free;
  end;
  result:=L64Bit;
end;

end.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -