Pythonnet AES 实现

问题描述

使用 https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.aes?view=net-5.0 中的示例代码,我使用 pythonnet 制作了一个极简版本

我相信我的问题在于 Stream 操作,因为我过去在没有 Streams 的情况下成功使用了 dot net Aes 实现。

运行以下代码

import clr

from System import *
from System.IO import *
from System.Security.Cryptography import *

def EnryptStringToBytes_Aes(plainText,Key,IV):
    if plainText == None or len(plainText) <= 0:
        raise Exception("test1")
    if Key == None or len(Key) <= 0:
        raise Exception("test2")
    if IV == None or len(IV) <= 0:
        raise Exception("test3")
    aesAlg = Aes.Create()
    aesAlg.Key = Key
    aesAlg.IV = IV
    
    encryptor = aesAlg.CreateEncryptor(aesAlg.Key,aesAlg.IV)
    msEncrypt = MemoryStream()
    csEncrypt = CryptoStream(msEncrypt,encryptor,CryptoStreamMode.Write)
    swEncrypt = StreamWriter(csEncrypt)
    swEncrypt.Write(plainText)
    encrypted = msEncrypt.ToArray()

    return(encrypted)

original = "Here is some data to encrypt!"

myAes = Aes.Create()
encrypted = EnryptStringToBytes_Aes(original,myAes.Key,myAes.IV)
print("original: {}\n\nencrypted: {}\nencrypted.Length: {}".format(original,encrypted,encrypted.Length))

产量:

original: Here is some data to encrypt!

encrypted: System.Byte[]
encrypted.Length: 0

不抛出错误,不返回数据。

这是由于我的输入数据的类型问题吗?还是与 MemoryStream() / CryptoStream() / StreamWriter() 有关,我假设 Streams 出于安全目的很重要,所以不想删除它们。

感谢任何帮助。

#编辑 同样值得注意的是......我知道使用像 pycrypto/crytodome 这样的东西更简单,但问题仍然在于使用 dotnet 函数,我想更好地理解这一点

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)