在 ironpython 上使用 Security.Cryptography 加密文本
Encrypt text using Security.Cryptography on ironpython
我正在尝试使用 IronPython 对 sharpdevelop 进行加密以加密文本,但出现以下错误:
"Specified key is not a valid size for this algorithm."
我尝试使用所有三种编码,尝试了不同大小的密钥,例如 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')
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))
我正在尝试使用 IronPython 对 sharpdevelop 进行加密以加密文本,但出现以下错误:
"Specified key is not a valid size for this algorithm."
我尝试使用所有三种编码,尝试了不同大小的密钥,例如 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')
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))