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