Situatie: 2 front-ends achter ISA. In mijn code maak ik gebruik van RijndaelManaged om de querystring te encrypten (zie code). Op een lijst van ongeveer 400 links gebeurt het regelmatig dat bij de querystring het 1e deel "garbled" id, vaak zijn het dezelfde items. Dit duurt dan een paar minuten waarna het probleem weer is verholpen.
Hetgene wat encrypt wordt is een combinatie van een aantal strings. De encryptie is niet cruciaal, maar ik wil hiermee bereiken dat mensen geen dingen gaan proberen.
Ik kan echter niet het probleem vinden. De encryptie en decryptie geven geen foutmeldingen maar het 1e deel van de string is dan garbled. Wie of wie kan me vertellen wat er verkeerd gaat?
ps. de Key en Vector heb ik aangepast in het onderstaande voorbeeld..
ps2. de code had ik gevonden op het Internet en aangepast voor eigen gebruik..
Hetgene wat encrypt wordt is een combinatie van een aantal strings. De encryptie is niet cruciaal, maar ik wil hiermee bereiken dat mensen geen dingen gaan proberen.
Ik kan echter niet het probleem vinden. De encryptie en decryptie geven geen foutmeldingen maar het 1e deel van de string is dan garbled. Wie of wie kan me vertellen wat er verkeerd gaat?
ps. de Key en Vector heb ik aangepast in het onderstaande voorbeeld..
ps2. de code had ik gevonden op het Internet en aangepast voor eigen gebruik..
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
| public class AES { private byte[] Key = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }; private byte[] Vector = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; private ICryptoTransform EncryptorTransform, DecryptorTransform; private System.Text.UTF8Encoding UTFEncoder; public AES() { RijndaelManaged rm = new RijndaelManaged(); EncryptorTransform = rm.CreateEncryptor(this.Key, this.Vector); DecryptorTransform = rm.CreateDecryptor(this.Key, this.Vector); UTFEncoder = new System.Text.UTF8Encoding(); } public string EncryptToString(string TextValue) { return ByteArrToString(Encrypt(TextValue)); } public byte[] Encrypt(string TextValue) { Byte[] bytes = UTFEncoder.GetBytes(TextValue); MemoryStream memoryStream = new MemoryStream(); CryptoStream cs = new CryptoStream(memoryStream, EncryptorTransform, CryptoStreamMode.Write); cs.Write(bytes, 0, bytes.Length); cs.FlushFinalBlock(); memoryStream.Position = 0; byte[] encrypted = new byte[memoryStream.Length]; memoryStream.Read(encrypted, 0, encrypted.Length); cs.Close(); memoryStream.Close(); return encrypted; } public string DecryptString(string EncryptedString) { return Decrypt(StrToByteArray(EncryptedString)); } public string Decrypt(byte[] EncryptedValue) { MemoryStream encryptedStream = new MemoryStream(); CryptoStream decryptStream = new CryptoStream(encryptedStream, DecryptorTransform, CryptoStreamMode.Write); decryptStream.Write(EncryptedValue, 0, EncryptedValue.Length); decryptStream.FlushFinalBlock(); encryptedStream.Position = 0; Byte[] decryptedBytes = new Byte[encryptedStream.Length]; encryptedStream.Read(decryptedBytes, 0, decryptedBytes.Length); encryptedStream.Close(); return UTFEncoder.GetString(decryptedBytes); } public byte[] StrToByteArray(string str) { if (str.Length == 0) throw new Exception("Invalid string value in StrToByteArray"); byte val; byte[] byteArr = new byte[str.Length / 3]; int i = 0; int j = 0; do { val = byte.Parse(str.Substring(i, 3)); byteArr[j++] = val; i += 3; } while (i < str.Length); return byteArr; } public string ByteArrToString(byte[] byteArr) { byte val; StringBuilder sb = new StringBuilder(); for (int i = 0; i <= byteArr.GetUpperBound(0); i++) { val = byteArr[i]; if (val < (byte)10) sb.Append("00"); else if (val < (byte)100) sb.Append("0"); sb.Append(val); } return sb.ToString(); } } |