Перейти к содержанию
Fire Monkey от А до Я

Лидеры

Популярный контент

Показан контент с высокой репутацией 21.02.2020 во всех областях

  1. Slym

    NetHTTPClient Compression?

    Это "не стандартное" поведение, обычно клиент не сжимает, но RFC это не запрещает... но проверь поймет ли сервер твой запрос я использую deflate, gzip это тотже deflate столько с заголовками и CRC и заморочек в связи с этим больше... function CompressData(const Data:TBytes):TBytes; var Source, Dest:TBytesStream; begin Dest:= TBytesStream.Create; try Source:=TBytesStream.Create(Data); try ZCompressStream(Source, Dest, zcMax); finally Source.Free; end; Dest.Size:=Dest.Size; result:=Dest.Bytes; finally Dest.Free; end; end; //AHTUNG! Non standart Request Header (with standart Name)! If truble - Rename то X-Content-Encoding var Params:TBytes; if length(Params)>MinCompressionSize then begin Params:=CompressData(Params); NetHeaders.Value['Content-Encoding']:='deflate'; end;
    1 балл
  2. Дмитрий Ш.

    [Android] Шифрование

    в дополнение преидущего поста, нашел бесплатное решение для Delphi у китайских коллег QDAC3 uses qaes, NetEncoding; procedure TForm1.InitEncrypt(var AES: TQAES); var AKeyType: TQAESKeyType; const AInitVector: TQAESBuffer = (49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 65, 66, 67, 68, 69, 70); // 1234567890ABCDEF begin AKeyType := kt128; AES.AsCBC(AInitVector, 'HJORNYCZJXJBUGOA', AKeyType); end; procedure TForm1.DecryptClick(Sender: TObject); var AES: TQAES; ABytes: TBytes; begin InitEncrypt(AES); MemoText.Lines.Clear; MemoText.Lines.Add(AES.Decrypt(TNetEncoding.Base64.DecodeStringToBytes(MemoQAES.Lines.Text))); end; procedure TForm1.EncryptClick(Sender: TObject); var AES: TQAES; ABytes: TBytes; begin InitEncrypt(AES); AES.Encrypt(Trim(MemoText.Lines.Text), ABytes); MemoQAES.Lines.Clear; MemoQAES.Lines.Add(TNetEncoding.Base64.EncodeBytesToString(ABytes)); end; проверка в GoLang и PHP работает, главное использовать вектор один
    1 балл
  3. Дмитрий Ш.

    [Android] Шифрование

    Удалось зашифровать и дешифровать текст в трех ЯП Delphi, PHP, GoLang PHP. Используется phpseclib v1.0.7 <?php // phpseclib 1.0.7 // http://phpseclib.sourceforge.net set_include_path('phpseclib'); include('Crypt/AES.php'); $my_key = 'HJORNYCZJXJBUGOA'; $my_iv = '1234567890ABCDEF'; $text = 'Проверка UTF8 текста'; $cipher = new Crypt_AES(); // CRYPT_AES_MODE_CBC $cipher->setKeyLength(128); $cipher->setKey($my_key); $cipher->setIV($my_iv); echo base64_encode($cipher->encrypt($text)).PHP_EOL; Delphi. Использую TMS Cryptography Pack uses CryptBase, AESObj, MiscObj; function AesEncryption:String; var AES: TAESEncryption; begin AES := TAESEncryption.Create(nil); try AES.AType := atCBC; AES.KeyLength := kl128; AES.OutputFormat := base64; AES.Key := 'HJORNYCZJXJBUGOA'; AES.IVMode := AESObj.userdefined; AES.IV := '1234567890ABCDEF'; result := AES.Encrypt('Проверка UTF8 текста'); finally AES.Free; end; end; GoLang. Все родное. Запустить в песочнице package main import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" "fmt" ) func PKCS5Padding(src []byte, blockSize int) []byte { padding := blockSize - len(src)%blockSize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(src, padtext...) } func PKCS5UnPadding(src []byte) []byte { length := len(src) unpadding := int(src[length-1]) return src[:(length - unpadding)] } func AesEncryption(key, iv, plainText []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } blockSize := block.BlockSize() origData := PKCS5Padding(plainText, blockSize) blockMode := cipher.NewCBCEncrypter(block, iv) cryted := make([]byte, len(origData)) blockMode.CryptBlocks(cryted, origData) return cryted, nil } func AesDecryption(key, iv, cipherText []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } blockMode := cipher.NewCBCDecrypter(block, iv) origData := make([]byte, len(cipherText)) blockMode.CryptBlocks(origData, cipherText) origData = PKCS5UnPadding(origData) return origData, nil } func main() { originalText := "Проверка UTF8 текста" fmt.Println(originalText) mytext := []byte(originalText) key := []byte("HJORNYCZJXJBUGOA") iv := []byte("1234567890ABCDEF") cryptoText, err := AesEncryption(key, iv, mytext) if err != nil { fmt.Println(err) } fmt.Println(base64.StdEncoding.EncodeToString(cryptoText)) decryptedText, _ := AesDecryption(key, iv, cryptoText) fmt.Println(string(decryptedText)) } К сожалению бесплатной либы для Delphi, чтоб работало в WIN и Android не нашел.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...