Ik ben voor een profielwerkstuk over cryptografie bezig met een programma dat wat simpele cryptografie doet zoals rot6 en rot13 maar ook een eigen verzinsel:
Nu heb ik dit in .NET geimplementeerd:
Dit werkt prima, behalve als je een wachtwoord langer dan 1 tekens neemt dat uit verschillende karakters (bytes) bestaat. Dan krijg je een gedeeltelijk corrupt bestand terug (de oorzaak weet ik ondertussen al). Op zoek naar de fout met de VS Debugger kom ik rare dingen tegen.
Zo geeft hij een keer hier ineens een Exception op:
(met als tekst: Poging tot het lezen of schrijven van beveiligd geheugen enz...)
Eerder kreeg ik ineens "An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module.". En ook een untraceable TargetInvocationException.
Andere .NET projecten en programma's lijken prima te werken op de PC. 'Normale' programma's werken ook prima. Wat zou dit kunnen zijn? Ik heb al geprobeerd om de computer de herstarten en .NET te repareren (setup optie). Dit helpt helaas niet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| (Encrypten) Formule voor byte 1: wachtwoord * mod( data ) Formule voor byte 2: aantal keer dat het wachtwoord in de databyte past bijvoorbeeld p=4 en data[]=10,23,64 (komma gescheiden bytes) 4 mod(10)=2,2 4 mod(23)=3,5 4 mod(64)=0,16 Samen wordt dit 2,2,3,5,0,16 (Decrypten) Formule voor decryptie: (wachtwoord * byte2) + byte 1 Met p=4: 4 * 2 + 2 = 10 4 * 5 + 3 = 23 4 * 16 + 0 = 64 Samen wordt dit de orginele data: 10,23,64. Bij een verkeerd wachtwoord, bijvoorbeeld p=3 wordt het 8,18,48=fout |
Nu heb ik dit in .NET geimplementeerd:
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
| public byte[] EncryptBytes(byte[] ToEncrypt) { byte[] ToReturn = new byte[this.GetEstimateFileSize(ToEncrypt.LongLength, true)]; long i = 0; int passpointer = 0; foreach ( byte b in ToEncrypt ) { byte pass = this.password[passpointer]; ToReturn[i] = (byte) ( b % pass ); ToReturn[i + 1] = (byte) (( b - ( b % pass ) ) / pass); i += 2; if ( ++passpointer == this.password.Length ) { passpointer = 0; } } return ToReturn; } public byte[] DecryptBytes(byte[] ToDecrypt) { byte[] ToReturn = new byte[this.GetEstimateFileSize(ToDecrypt.LongLength, false)]; long i = 0; long j = 1; long r = 0; int passpointer = 0; while ( j < ToDecrypt.LongLength ) { byte pass = this.password[passpointer]; ToReturn[r] = (byte) (( pass * ToDecrypt[j] ) + ToDecrypt[i]); i+=2; j+=2; r++; if ( ++passpointer == this.password.Length ) { passpointer = 0; } } return ToReturn; } |
Dit werkt prima, behalve als je een wachtwoord langer dan 1 tekens neemt dat uit verschillende karakters (bytes) bestaat. Dan krijg je een gedeeltelijk corrupt bestand terug (de oorzaak weet ik ondertussen al). Op zoek naar de fout met de VS Debugger kom ik rare dingen tegen.
Zo geeft hij een keer hier ineens een Exception op:
C#:
1
2
3
4
5
| private void button_OutputFileBrowse_Click(object sender, EventArgs e) { if ( this.FileDialog_Output.ShowDialog(this) == DialogResult.OK ) { this.box_OutputFile.Text = this.FileDialog_Output.FileName; } } |
(met als tekst: Poging tot het lezen of schrijven van beveiligd geheugen enz...)
Eerder kreeg ik ineens "An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module.". En ook een untraceable TargetInvocationException.
Andere .NET projecten en programma's lijken prima te werken op de PC. 'Normale' programma's werken ook prima. Wat zou dit kunnen zijn? Ik heb al geprobeerd om de computer de herstarten en .NET te repareren (setup optie). Dit helpt helaas niet.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]