Språk: VB msin.Write(Convert.FromBase64String(strInput), 0, Convert.FromBase64String(strInput).Length) Ja! Jag har inte suttit med just Rijndael. Skulle du kunna maila din kod till mig så kan jag testa den? Vill nämligen veta exakt vilken rad du får felet. Det är den raden som du skrev innan som orsakar felet. Det måste vara någon "overflow" eller nått om man har krypterat för många tecken. Jag har löst det hela (hjälpligt) via en js-funktion som kontrollerar att ej fler än 50 tecken skrivs in i textfältet. Än så länge har jag ej stött på felet. Du kan kryptera krypteringsnycklen med Crypto APIet.Fel vid dekryptering
Jag får följande felmeddelande vid dekryptering:
invalid length for a base-64 char array.
Jag kan inte räkna ut vad det beror på, om strängen är för lång, innehåller felaktiga tecken eller vad.
Kryptera
*******
<code>
Public Function Encrypt(ByVal strInput As String) As String
Dim msin As New System.IO.MemoryStream()
msin.Write(System.Text.Encoding.Default.GetBytes(strInput), 0, System.Text.Encoding.Default.GetBytes(strInput).Length)
msin.Position = 0
Dim msout As New System.IO.MemoryStream()
Dim buf() As Byte = New Byte(2048) {}
Dim sa As SymmetricAlgorithm = SymmetricAlgorithm.Create("Rijndael")
sa.IV = System.Text.Encoding.Default.GetBytes(genIV)
sa.Key = Getkey()
Dim trans As ICryptoTransform = sa.CreateEncryptor()
Dim cs As CryptoStream = New CryptoStream(msout, trans, CryptoStreamMode.Write)
Dim nLen As Integer
nLen = msin.Read(buf, 0, buf.Length)
While (nLen > 0)
cs.Write(buf, 0, nLen)
nLen = msin.Read(buf, 0, buf.Length)
End While
cs.FlushFinalBlock()
Encrypt = System.Convert.ToBase64String(msout.ToArray)
cs.Close()
msin.Close()
End Function
</code>
Dekryptera
*********
<code>
Public Function Decrypt(ByVal strInput As String) As String
Dim msin As New System.IO.MemoryStream()
msin.Write(Convert.FromBase64String(strInput), 0, Convert.FromBase64String(strInput).Length)
msin.Position = 0
Dim msout As New System.IO.MemoryStream()
Dim buf() As Byte = New Byte(2048) {}
Dim sa As SymmetricAlgorithm = SymmetricAlgorithm.Create("Rijndael")
sa.IV = System.Text.Encoding.Default.GetBytes(genIV)
sa.Key = Getkey()
Dim trans As ICryptoTransform = sa.CreateDecryptor()
Dim cs As CryptoStream = New CryptoStream(msin, trans, CryptoStreamMode.Read)
Dim nLen As Integer
nLen = cs.Read(buf, 0, buf.Length)
While (nLen > 0)
msout.Write(buf, 0, nLen)
nLen = cs.Read(buf, 0, buf.Length)
End While
Decrypt = System.Text.Encoding.Default.GetString(msout.ToArray)
msin.Close()
msout.Close()
End Function
</code>Sv: Fel vid dekryptering
Är det här du får felet?
//Johan NSv: Fel vid dekryptering
Jag har varit inne på msdnoch läst lite.
FormatException (som är felet jag får)
msdn:
The length of inArray is less than 4.
-or-
The length of inArray is not an even multiple of 4.
Skal man kontrollerar inArray innan man dekrypterar strängen, eller? Om man då manipulerar strängen får man ju inte ut rätt resultat efter dekryptering, eller?
Det känns som jag är "ute o seglar", noll koll.
EN FRÅGA TILL:
Jag har min enryption-key i web.config, typ:
<code>
<appSettings>
<add key="EncryptKey" value="min nyckel"/>
</appSettings>
</code>
som jag från min klass anropar via:
<code>
Privat strEncryptionKey = System.ConfigurationSettings.AppSettings("EncryptKey")
</code>
Är detta en bra(smart) lösning eller ej (förslag)?Sv: Fel vid dekryptering
Ang fråga två:
Det beror lite på. Jag skulle kanske lagt den på det sättet men då skulle jag även kryptera den med ex DES eller något, kanske to m. använda Crypto API:et
//Johan NSv: Fel vid dekryptering
Fråga 2:
Hur krypterar du krypteringsnyckeln, Encrypt använder ju själva krypteringsnyckeln för att kryptera, det känns lite som rundgång, menar du att jag skall kryptera nyckeln med en annan krypteringsfunktion, eller?
Har du någon bra url eller exempel med Crypto API:et?
Hur pass "säker" är web.config-filen.Sv: Fel vid dekryptering
Metoder som:
CryptProtectData, CryptUnprotectData
Jag kan inte här på några rader säga hur du programmerar detta så du får en länk här som ger dig lite ex hur du kan gå till väga.
http://www.obviex.com/Samples/Dpapi.aspx
Web.config är relativt säker, men om någon får tag i den så (via hack) så är du inte direkt säker längre. Därför kan man som regel skydda sådan data som ge större skada på systemet, connstring, keys etc...
//Johan N