Chr*_*ris 1 asp.net encryption cryptography rijndaelmanaged
好的,所以刚刚接受了密钥并且有一个44字符长的加密字符串,我现在无法解密(aarrgghh):
要解密的数据长度无效.
环顾四周并阅读各种帖子后,看起来好像转换为Base64String可能是问题,但我看不出它出错了 - 我看到的许多解决方案看起来与我的相同.再次,我真的很感激任何帮助 - 下面的摘录:
加密/解密功能
Private byteKey As Byte() = Encoding.UTF8.GetBytes("B499F4BF48242E05548D1E4C8BB26A2E")
Private byteIV As Byte() = Encoding.UTF8.GetBytes(",%u'm&'CXSy/T7x;4")
Private Function Rijndael(ByVal sInput As String, ByVal bEncrypt As Boolean) As String
' Create an instance of encyrption algorithm.
Dim _rijndael As New RijndaelManaged()
' Create an encryptor using key and IV - already available in byte() as byteKey and byteIV
Dim transform As ICryptoTransform
If bEncrypt Then
transform = _rijndael.CreateEncryptor(byteKey, byteIV)
Else
transform = _rijndael.CreateDecryptor(byteKey, byteIV)
End If
' Create streams for input and output
Dim msOutput As New System.IO.MemoryStream()
Dim msInput As New CryptoStream(msOutput, transform, CryptoStreamMode.Write)
' Feed data into the crypto stream.
msInput.Write(Encoding.UTF8.GetBytes(sInput), 0, Encoding.UTF8.GetBytes(sInput).Length)
' Flush crypto stream.
msInput.FlushFinalBlock()
Dim byteOutput As Byte() = msOutput.ToArray
Return Convert.ToBase64String(byteOutput)
End Function
Run Code Online (Sandbox Code Playgroud)
用法:
Dim sEncrypted As String = Rijndael("This is a test", True)
Dim sDecrypted As String = Rijndael(sEncrypted, False) **This is the line where it is crashing**
Run Code Online (Sandbox Code Playgroud)
编辑 - 参考的最终看似有效的功能(见注释):
Private byteKey As Byte() = Encoding.UTF8.GetBytes("B499F4BF48242E05548D1E4C8BB26A2E")
Private byteIV As Byte() = Encoding.UTF8.GetBytes(",%u'm&'CXSy/T7x;4")
Public Function Encrypt(ByVal sInput As String) As String
' Create an instance of our encyrption algorithm.
Dim _rijndael As New RijndaelManaged()
' Create an encryptor using our key and IV
Dim transform As ICryptoTransform
transform = _rijndael.CreateEncryptor(byteKey, byteIV)
' Create the streams for input and output
Dim msOutput As New System.IO.MemoryStream()
Dim msInput As New CryptoStream(msOutput, transform, CryptoStreamMode.Write)
' Feed our data into the crypto stream
msInput.Write(Encoding.UTF8.GetBytes(sInput), 0, Encoding.UTF8.GetBytes(sInput).Length)
msInput.FlushFinalBlock()
Return Convert.ToBase64String(msOutput.ToArray)
End Function
Public Function Decrypt(ByVal sInput As String) As String
' Create an instance of our encyrption algorithm.
Dim _rijndael As New RijndaelManaged()
' Create an encryptor using our key and IV
Dim transform As ICryptoTransform
transform = _rijndael.CreateDecryptor(byteKey, byteIV)
' Create the streams for input and output
Dim msOutput As New System.IO.MemoryStream()
Dim msInput As New CryptoStream(msOutput, transform, CryptoStreamMode.Write)
' Feed our data into the crypto stream.
msInput.Write(Convert.FromBase64String(sInput), 0, Convert.FromBase64String(sInput).Length)
msInput.FlushFinalBlock()
Return Encoding.UTF8.GetString(msOutput.ToArray)
End Function
Run Code Online (Sandbox Code Playgroud)
用法
Dim sEncrypted As String = Encrypt("This is a test")
Dim sDecrypted As String = Decrypt(sEncrypted)
Run Code Online (Sandbox Code Playgroud)
如果您要将其转换为base64,则必须使用Base64对其进行解码.此时您正在使用输出Base64字节数组,然后使用UTF8将其转换回字节,这将为您提供完全不同的值.
您应该使用Convert.FromBase64String而不是UTF8在解码时将字符串更改为字节,然后使用UTF8而不是Base64来解释数据.
EG:在你想要的解码上
msInput.Write(Convert.FromBase64String(sInput), 0, Convert.FromBase64String(sInput).Length)
Run Code Online (Sandbox Code Playgroud)
对于解码时的返回:
Return Encoding.UTF8.GetString(byteOutput)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3187 次 |
| 最近记录: |