使用加密文本安全。密码学论铁蟒

2024-10-05 14:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在sharpdevelop上使用IronPython加密文本,但是我得到了以下错误:

“指定的密钥不是此算法的有效大小。”

我尝试使用这三种编码,尝试了不同大小的密钥,比如128、256、1024等等。在

这是我使用的代码:

import System.Security.Cryptography
from System.Text import UTF8Encoding, ASCIIEncoding, UnicodeEncoding

self.MD5 = System.Security.Cryptography.MD5CryptoServiceProvider()
self.DES = System.Security.Cryptography.DESCryptoServiceProvider()
self.UTF8Encode = UTF8Encoding()
self.ASCIIEncode = ASCIIEncoding()
self.Unicode = UnicodeEncoding()

def MD5Hash(self, value):
    return self.MD5.ComputeHash(self.Unicode.GetBytes(value))

def Encrypt(self, StringInput, Key):
    self.DES.Key = self.MD5Hash(Key)
    DES.Mode = CipherMode.ECB()
    buffer = self.UTF8Encode.GetBytes(StringInput)
    return System.Convert.ToBase64String(self.DES.CreateEncryptor().TransformFinalBlock(buffer, 0, len(buffer)))

def Button1Click(self, sender, e):
    self._textBox2.Text = self.Encrypt(self._textBox1.Text, 'keys')

Tags: keytextimportselfdefbuffer密钥system
2条回答

DES不是三重DES。DES是一种64位块大小和56位密钥大小的分组密码,通常表示为64位,其中每个字节的一位是奇偶校验。当然,您不应该再使用DES,而应该使用AES。DES可以在很短的时间内被破解。在

实际上,你也不应该使用MD5或ECB。在开始编码之前,也许你应该先阅读一下你的密码学。在

最终工作代码:

import System.Security.Cryptography
from System.Text import ASCIIEncoding

self.AES = System.Security.Cryptography.AesCryptoServiceProvider()
self.ASCIIEncode = ASCIIEncoding()

def Encrypt(self, StringInput, key, salt):
    saltArray = self.ASCIIEncode.GetBytes(salt)
    rfcKey = System.Security.Cryptography.Rfc2898DeriveBytes(key, saltArray, 10000)
    self.AES.Key = rfcKey.GetBytes(self.AES.KeySize / 8)
    self.AES.IV = rfcKey.GetBytes(self.AES.BlockSize /8)
    buffer = self.ASCIIEncode.GetBytes(StringInput)
    return System.Convert.ToBase64String(self.AES.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length))

def Decrypt(self, EncryptedString, key, salt):
    saltArray = self.ASCIIEncode.GetBytes(salt)
    rfcKey = System.Security.Cryptography.Rfc2898DeriveBytes(key, saltArray, 10000)
    self.AES.Key = rfcKey.GetBytes(self.AES.KeySize / 8)
    self.AES.IV = rfcKey.GetBytes(self.AES.BlockSize /8)
    buffer = System.Convert.FromBase64String(EncryptedString)
    return self.ASCIIEncode.GetString(self.AES.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length))

相关问题 更多 >