Перейти к содержанию
  • Регистрация
  • 1

Вопрос

Здравствуйте.

Есть ли ку кого рабочие примеры с шифрованием, что бы под андроидом работало? RSA, AES и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

В GetIt есть LockBox VCL and FMX 2.1. Вполне юзабельно.

Зашифровать:
    AES := TLbRijndael.Create(nil);
    try
      AES.CipherMode := TLbCipherMode.cmCBC;
      AES.KeySize := TLbKeySizeRDL.ks256;
      AES.GenerateKey(Passphrase);
      FPassword := AES.EncryptString(Value);
    finally
      AES.Free;
    end;

Расшифровать:
    AES := TLbRijndael.Create(nil);
    try
      AES.CipherMode := TLbCipherMode.cmCBC;
      AES.KeySize := TLbKeySizeRDL.ks256;
      AES.GenerateKey(Passphrase);
      Result := AES.DecryptString(FPassword);
    finally
      AES.Free;
    end;

 

p.s. Тему перенёс в подходящий раздел

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 минуты назад, Andrey Efimov сказал:

В GetIt есть LockBox VCL and FMX 2.1. Вполне юзабельно.


Зашифровать:
    AES := TLbRijndael.Create(nil);
    try
      AES.CipherMode := TLbCipherMode.cmCBC;
      AES.KeySize := TLbKeySizeRDL.ks256;
      AES.GenerateKey(Passphrase);
      FPassword := AES.EncryptString(Value);
    finally
      AES.Free;
    end;

Расшифровать:
    AES := TLbRijndael.Create(nil);
    try
      AES.CipherMode := TLbCipherMode.cmCBC;
      AES.KeySize := TLbKeySizeRDL.ks256;
      AES.GenerateKey(Passphrase);
      Result := AES.DecryptString(FPassword);
    finally
      AES.Free;
    end;

 

p.s. Тему перенёс в подходящий раздел

Смогут ли эти данные быть расшифрованными в php?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 минуты назад, sviat9440 сказал:

Смогут ли эти данные быть расшифрованными в php?

Не знаю, не пробовал. Была задача: хранить на устройстве в зашифрованном виде пароль, а потом при обращении к сайту по https (Post методом) он передавался открыто (тут уж как заказчик сказал, так и делаем).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, Andrey Efimov сказал:

Не знаю, не пробовал. Была задача: хранить на устройстве в зашифрованном виде пароль, а потом при обращении к сайту по https он передавался открыто (тут уж как заказчик сказал, так и делаем).

Ясно. Просто у меня не получилось расшифровать. Может что-то неправильно делал...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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