【问题标题】:I want to encrypt TidBytes with AES我想用 AES 加密 TidBytes
【发布时间】:2019-08-07 10:43:34
【问题描述】:

我正在使用 Tforge 和 Delphi,我正在尝试使用 AES 加密 TidBytes

var Key,MyBytearray: ByteArray;
MyTidBytes:TidBytes;

Key:= ByteArray.FromText('1234567890123456');

EncryptedText:= TCipher.AES.ExpandKey(Key, CTR_ENCRYPT or PADDING_NONE).EncryptByteArray(MyBytearray);

此代码与ByteArray 一起工作正常,但我想将它与 idBytes 一起使用,这可能吗?

如何将ByteArray 转换为TidBytes

【问题讨论】:

  • TIdBytes 是 Delphi 附带的 Indy 网络库的一部分。现在,由于 Indy 库还提供了一些自己的加密功能,也许您可​​以使用它来代替 TCipher。 Othervise 基于this SO answer它可能会将 TIdBytes 数组类型转换为 TBytes 数组,因为它们都是动态数组。

标签: delphi aes


【解决方案1】:

ByteArray 被声明为record,它在内部拥有一个封装字节数据的IBytes 接口对象。 TIdBytes 被声明为一个简单的动态数组。因此,您不能在它们之间直接进行类型转换。您必须来回复制原始字节。

您可以手动执行此操作,例如:

MyBytearray := ...;
MyTidBytes := RawToBytes(MyBytearray.Raw^, MyBytearray.Len);
// RawToBytes() is an Indy function in the IdGlobal unit...

...

MyTidBytes := ...;
MyBytearray := ByteArray.FromBytes(MyTidBytes);
// FromBytes() accepts any type of raw byte array as input, including dynamic arrays ...

或者,或者,ByteArray 具有用于TBytesImplicit 转换运算符,并且TIdBytesTBytes 类型转换兼容,因为它们都是动态数组,例如:

MyBytearray := ...;
TBytes(MyTidBytes) := MyBytearray;

...

MyTidBytes := ...;
MyBytearray := TBytes(MyTidBytes);

【讨论】:

    【解决方案2】:

    这完全取决于ByteArrayTidBytes 的声明方式。


    如果它们都是Byte 的动态数组,您可以使用typecast

    TidBytesByteArray

    MyByteArray := ByteArray(MyTidBytes);
    

    ByteArrayTidBytes

    MyTidBytes := TidBytes(MyBytearray);
    

    如果ByteArray 被定义为this 并且TidBytesByte 的动态数组,请尝试以下操作:

    MyByteArray.Insert(0, TBytes(MyTidBytes));
    

    【讨论】:

    • 但我想将 Tidbytes 转换为 Bytearray 而不是其他方式
    • @icinemagr 如果演员在一个方向上起作用,那么它肯定会在另一个方向上起作用吗?
    • 不,它不起作用,我尝试一下 bytearray 在此处的 Tfarrays.pas 中声明 bitbucket.org/sergworks/tforge/src/default/Source/User/… 并且不起作用。我想要做的是通过 indy UDP 客户端发送加密的 ByteArray。并在 IndyUDPserver 上解密,但我不能
    • 我检查为正确,因为你是唯一一个回答我的人。但它不起作用我得到异常错误
    猜你喜欢
    • 2011-02-15
    • 2016-09-22
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 2012-02-24
    • 2013-08-12
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多