В Swift я написал этот код для шифрования строки
func Encrypt2(_ input:String)->String?{
let key = "123456abcdefcdhs"
do{
let encrypted: Array<UInt8> = try AES(key: key, iv: key, padding: .pkcs5).encrypt(Array(input.utf8))
return encrypted.toBase64()?.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
}catch{
}
return nil
}
И в c# код для расшифровки такой:
string key = "123456abcdefcdhs";
RijndaelManaged rijndaelCipher = new RijndaelManaged();
rijndaelCipher.Mode = CipherMode.CBC;
rijndaelCipher.Padding = PaddingMode.PKCS7;
rijndaelCipher.KeySize = 0x80;
rijndaelCipher.BlockSize = 0x80;
byte[] encryptedData = Convert.FromBase64String(textToDecrypt);
byte[] pwdBytes = Encoding.UTF8.GetBytes(key);
byte[] keyBytes = new byte[0x10];
int len = pwdBytes.Length;
if (len > keyBytes.Length)
{
len = keyBytes.Length;
}
Array.Copy(pwdBytes, keyBytes, len);
rijndaelCipher.Key = keyBytes;
rijndaelCipher.IV = keyBytes;
byte[] plainText = rijndaelCipher.CreateDecryptor().TransformFinalBlock(encryptedData, 0, encryptedData.Length);
return Encoding.UTF8.GetString(plainText);
Шифрование работает нормально, но когда дело доходит до c# расшифровка ... дай мне ошибку, скажем, длина base64. Я попытался изменить .pkcs5 на .pkcs7, но все равно не работает. что не так с кодом?
Строка base64 -> aMtLgvWQOguK + GPbGT / Jxw == иногда строка -> aMtLgvWQOguK GPbGT / Jxw ==