乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Delphi2009,2010能使用的AES單元

       quasiceo 2013-01-11

      Delphi2009,2010能使用的AES單元

      606人閱讀 評(píng)論(2) 收藏 舉報(bào)

      從DELPHI2009開始,所有的string類型都被編譯器當(dāng)成了widestring了.早期版本的各個(gè)模塊單元不得不重寫.前些天一直在忙著處理這個(gè)AES單元,在網(wǎng)上搜索到了幾個(gè)所謂的解決方案,但實(shí)際上都是在亂來,結(jié)果雖然是正確的,但是比結(jié)果更為重要的是修改的思路吧.這個(gè)單元在D2009無法使用,是因?yàn)檩敵鼋Y(jié)果時(shí)使用的是widestring導(dǎo)致尾部有部分字符被截?cái)? 網(wǎng)上的解決辦法居然是去修改原來封裝得接近完美的單元...天...其實(shí)這問題很容易解決,只要重寫一下他的輸出流...

       

       

      共有兩個(gè)單元,AES,和ELAES,以下是AES單元的主要內(nèi)容.ELAES單元不需要改動(dòng).不多說了,需要的自己看吧.

       

      type
        TMyStringStream=class(TStringStream)
          function GetHexData:string;
        end;

      implementation

      { TMyStringStream }
      function TMyStringStream.GetHexData: string;
      var
      i:integer;
      begin
      for I := 0 to (size - 1) do //div 2 do
       Result := Result + IntToHex(Bytes[I], 2);
      end;


      function AES_EncryptString(Value,Key: String): string;
      var
        SS, DS: TMyStringStream;
        Size: Integer;
        AESKey: TAESKey128;
        Key: AnsiString;//string;
        AnsiValue:AnsiString;
      begin
        AnsiValue:=Value;

        Result := '';
        SS := TMyStringStream.Create(AnsiValue);
        DS := TMyStringStream.Create('');
        try
          Size := SS.Size;
          DS.WriteBuffer(Size, SizeOf(Size));
          FillChar(AESKey, SizeOf(AESKey), 0);
          Move(PAnsiChar(Key)^, AESKey, Min(SizeOf(AESKey), Length(Key)));
          EncryptAESStreamECB(SS, 0, AESKey, DS);
          Result :=DS.GetHexData;// StrToHex(DS.DataString);
        finally
          SS.Free;
          DS.Free;
        end;
      end;

      function AES_DecryptString(Value,Key: string): string;
      var
        SS: TMyStringStream;
        DS: TMyStringStream;
        Size: Integer;
        AESKey: TAESKey128;
        Key: AnsiString;
      begin
        Result := '';
        SS := TMyStringStream.Create(HexToAnsi(Value));//Trim(HexToStr(Value)));
        DS := TMyStringStream.Create('');
        try
          Size := SS.Size;
          SS.ReadBuffer(Size, SizeOf(Size)); //起始信息
          FillChar(AESKey, SizeOf(AESKey), 0);
          Move(PAnsiChar(Key)^, AESKey, Min(SizeOf(AESKey), Length(Key)));
          DecryptAESStreamECB(SS, SS.Size - SS.Position, AESKey, DS);
          //DecryptAESStreamECB(SS, SS.Size, AESKey, DS);
          //Result :=DS.GetStringData;//
          Result := DS.DataString;
        finally
          SS.Free;
          DS.Free;
        end;
      end;

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多