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

Дмитрий Ш.

Пользователи
  • Постов

    31
  • Зарегистрирован

  • Посещение

  • Победитель дней

    5

Сообщения, опубликованные Дмитрий Ш.

  1. В 05.12.2022 в 19:08, Aleks Serov сказал:

    Скачал на GitHub и поставил компоненты Alcinoe но они под Win32, а мне надо для Android 11

    Alcinoe  кроссплатформенное решение.

    в самой демке есть пример плэеера в листвью

    или вот https://github.com/bravesoftdz/MediaPlayer_64Bit_Alcinoe (это я не смотрел)

    но Alcinoe нужно уметь готовить, там чуть сложнее чем кинуть кнопку на форму, нужно подключать либы

     

  2. какой культурный собеседник.

    Ладно текст ошибки не читает, ведь на иностранном языке написана. Это же переводить нужно, а гуглом пользоваться не научили. Так он еще и русский читать не в состоянии. 

     

     

  3. в дополнение преидущего поста, нашел бесплатное решение для 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 работает, главное использовать вектор один 

     

  4. Удалось зашифровать и дешифровать текст в трех ЯП 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 не нашел.

     

  5. будем приводить аргументы

    1. Не безопасно. не знаем откуда к базе подключаемся, а значит нужен доступ с любых хостов.
    2. нагрузка на саму базу. открыть долгий коннект и работа с долгими транзакциями это плохо сказывается на быстродействии.
    3. каждый клиент это отдельный коннект. опять нагрузка на БД (в 3-х звенке пулл коннектов)
    4. Что делать серверу если во время запроса у вас пропало соединение и не все данные ушли на сервер?

    для затравки так сказать... жду опровержений )

  6. мое мнение. чат - плохо. да. обсудить, что лучше яблоко или андроид можно. но.

    но вот для вопросов связанных с программированием - зло.

    на форуме есть поиск. форум индексируется в поисковиках. что позволяет искать ответы не задавая лишних вопросов.

×
×
  • Создать...