Delphi上的Rijnadel C#加密算法

Delphi上的Rijnadel C#加密算法,delphi,Delphi,没有在delphi上用C#移动rijnadael加密算法 Rijndael aes; byte[] retVal = null; byte[] contentBytes; byte[] passwordBytes; byte[] ivBytes; string content = "3wAHQZwW7y115QvI0PuSltzBgNmhPvkk0Cw1zKUTX9kEs18rnwKzXBIadf4vTMyCFGolYRpu9vlwyUHuGfMe7eAhULgEBjb9Yoawl3dgYQo

没有在delphi上用C#移动rijnadael加密算法

Rijndael aes;
byte[] retVal = null;
byte[] contentBytes;
byte[] passwordBytes;
byte[] ivBytes;

string content = "3wAHQZwW7y115QvI0PuSltzBgNmhPvkk0Cw1zKUTX9kEs18rnwKzXBIadf4vTMyCFGolYRpu9vlwyUHuGfMe7eAhULgEBjb9Yoawl3dgYQo=";
string password="GAT";

    contentBytes = Convert.FromBase64String(content);
    passwordBytes = new byte[32];
    ivBytes = new byte[16];
    Array.Copy(Encoding.Unicode.GetBytes(password), passwordBytes, Encoding.Unicode.GetBytes(password).Length);
    Array.Copy(passwordBytes, ivBytes, 16);
    using (aes = Rijndael.Create())
    {
        aes.Key = passwordBytes;
        aes.IV = ivBytes;
        aes.Padding = PaddingMode.PKCS7;
        retVal = aes.CreateDecryptor().TransformFinalBlock(contentBytes, 0, contentBytes.Length);
    }
在Delphi上使用DCP组件,没有取得特别的成功。 Delphi XE5:

procedure TForm1.Button1Click(Sender: TObject);
var
  din, dout: AnsiString;
  Vector: array of byte;
  Cipher : TDCP_rijndael;
  aKey:AnsiString;
begin
    SetLength(Vector, 16);

    aKey:='GAT';
    din:='3wAHQZwW7y115QvI0PuSltzBgNmhPvkk0Cw1zKUTX9kEs18rnwKzXBIadf4vTMyCFGolYRpu9vlwyUHuGfMe7eAhULgEBjb9Yoawl3dgYQo=';
    Cipher := TDCP_rijndael.Create(nil);
    try
      Cipher.Init(aKey, Length(aKey)*8, Vector);
      Cipher.CipherMode := cmCBC;
      dout := Cipher.DecryptString(din);
    finally
      Cipher.Burn;
      Cipher.Free;
    end;
    showmessage(dout);
end;

分配一个向量?

我认为Init和DecryptString方法使用数组作为参数,但您使用的是字符串,在Delphi中基本上也是数组,但是是特殊的数组。您必须指向正确的第一项,它是1,而不是C中的0。 当然,您还可以首先转换字节数组中的ansistring并将其提供给方法

.Init(aKey[1], ....) 


hth

除了Delphi代码之外,对于显示问题的两种语言,可以运行的完整测试程序如何?那么,您希望该代码做什么?它实际上做什么?我想知道是什么让你用字符串来保存二进制数据。字符串用于文本。这是我在这里看到的最常见的一个错误。这似乎在Delphi标签中非常常见。这一失败并不奇怪:C代码似乎使用256位键(32字节),IV使用键的前16个字节,PKCS 7填充,但没有(明显的)CBC模式。您的Delphi甚至没有提到256位键(您使用的是3*8=24位??),没有填充,没有IV,但它需要CBC模式(并且没有从Base64重新转换)。
.Decrypt(din[1])