问题描述
使用 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 (将#修改为@)