如何解决带有指针的AES加密
我正在使用
Aes
类用于加密某些字节。我可以打电话
CreateEncryptor
方法获取ICryptoTransform
,然后从那里适当使用它。但是,我正在加密的数据是指向某些内存的指针。 (byte*
)。 ICryptoTransform仅接受byte[]
的
我的问题是在将其用于AES之前是否必须将指针复制到托管数组中?
解决方法
是的,您必须复制。来自非托管库的非托管指针byte *
将不具有托管byte[]
具有的额外信息,即长度,类型句柄,以便CLR知道此内存所指的类型以及锁使用的同步块索引关键字。
因此,任何期望byte[]
的托管方法都期望传递的数组符合.NET对象格式。
例如,如果ICryptoTransform
方法尝试访问数组的长度,则它将在非托管byte *
指针中找不到它。如果尝试使用byte[]
关键字获得对lock
数组的锁定,则它期望Sync块索引等。
相反,您可以使用fixed
关键字来获取指向byte[]
数组中第一个元素的指针。这是因为期望byte*
的代码并不关心byte[]
中的额外信息(尽管许多非托管代码可能关心长度,并要求您将length作为单独的参数传递)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。