Digest

By E.Hooijmeijer

1 Inleiding Om eventuele stemfraude op te sporen heeft Minister Remkes opdracht gegeven om de uitvoer van de stem computers te voorzien van een semi unieke code gebaseerd op de inhoud van de originele resultaten. Als een onverlaat de uitslagen mocht aanpassen nadat ze de stemcomputer hebben verlaten dan kan dit nu vastgesteld worden. Uiteraard zijn er nog vele andere manieren van fraude mogelijk, maar het is belangrijk dat een illusie van betrouwbaarheid leeft bij het grote publiek. 2 Opdracht Implementeer de methode 'digest' welke als invoer het originele bericht heeft en een algoritme waarmee het bericht moet worden omgezet naar een semi unieke code. Deze algoritmen zijn welbekende en doorgeteste algoritmen zoals MD5 en SHA. There is no Security in Obscurity. Gelukkig heeft Java een security package met implementaties van deze algoritmen. Dat scheelt weer werk. Er zijn een paar uitzonderingen : - Als het bericht NULL is dan is de digest ook NULL. - Als het algoritme NULL is dan is de digest de hexadecimale representatie van de bericht bytes. - Bestaat een algoritme niet dan moet een RuntimeException gegooid worden. 3 Voorbeeld De verkiezingsuitslag is bijvoorbeeld 'PvdA:25%' en het algoritme is NULL dan is de uitkomst de hexadecimale representatie van de string bytes : '507664413a323525'. Waarbij de 'P' dan overeenkomt met '50'. 0x50 hexadecimaal is 80 in decimale notatie en komt overeen met het karakter P. De verkiezings uitslag is bijvoorbeeld 'PvdA:25%' en het algoritme is 'SHA' dan is de uitkomst : '27f8b8717d72dd8b41493249517bdc42' 4 Tips - de algoritmen zijn al geimplementeerd in de java.security package. - De Integer klasse heeft een interesante methode voor het omvormen van integers naar hexStrings. - Jammer alleen dat je geen integers hebt.. - en een byte altijd moet resulteren in 2 hexadecimale digits...
Test case 1 : NULL Message Test Gegeven een NULL uitslag, bereken de digest met het algoritme 'SHA'. De verwachtte uitkomst is: NULL Test case 2 : No algorithm Test I Gegeven de uitslag 'PvdA:25%', bereken de digest zonder algoritme. De verwachtte uitkomst is: '507664413a323525' Test case 3 : No algorithm Test II Gegeven de uitslag 'VVD:15%', bereken de digest zonder algoritme. De verwachtte uitkomst is: '5656443a313525' Test case 4 : MD5 Test Gegeven de uitslag 'PvdA:25%', bereken de digest met het algoritme 'MD5'. De verwachtte uitkomst is: '27f8b8717d72dd8b41493249517bdc42' Test case 5 : SHA Test Gegeven de uitslag 'PvdA:25% VVD:15% CDA:20% GroenLinks:12% D66:1% 1NL:8%', bereken de digest met het algoritme 'SHA'. De verwachtte uitkomst is: 'd128450667705dfeeb69e244c25750635d74d70e' Test case 6 : MD2 Test Gegeven de uitslag 'PvdA:15% CDA:21% VVD:15% GroenLinks:2% D66:4% 1NL:18%', bereken de digest met het algoritme 'MD2'. De verwachtte uitkomst is: '632ba83287d278709cd8bb8d45fc5a88' Test case 7 : MD5 Test Gegeven de uitslag 'PvdA:21% VVD:15% CDA:20% GroenLinks:12% D66:2% 1NL:12%', bereken de digest met het algoritme 'MD5'. De verwachtte uitkomst is: 'b231f53109b7381b6d9c22945ce00998' Test case 8 : SHA-256 Test Gegeven de uitslag 'PvdA:22% VVD:1% CDA:20% GroenLinks:8% D66:3% 1NL:1%', bereken de digest met het algoritme 'SHA-256'. De verwachtte uitkomst is: '62c22ef0bb4318e29529d3c7153949cee2d3328a2397dd2696a2c9ee968704cf' Test case 9 : SHA-512 Test Gegeven de uitslag 'PvdA:24% VVD:5% CDA:20% GroenLinks:31% D66:2% 1NL:3%', bereken de digest met het algoritme 'SHA-512'. De verwachtte uitkomst is: 'fb36393f156eee940f9b08327313b3f336d9e7faafdf2c9caba3ce443d20250af7a672d7921dac3f3462e38d6a94f225f8b55b28e26445caba95ad78b6242fdc' Test case 10 : XYZ Test Gegeven de uitslag 'PvdA:1% VVD:26% CDA:20% GroenLinks:2% D66:3% 1NL:1%', bereken de digest met het algoritme 'XYZ'. De verwachtte uitkomst is een RuntimeException Test case 11 : Hash Hash Test Gegeven de uitslag 'PvdA:22% VVD:1% CDA:20% GroenLinks:8% D66:3% 1NL:1%', bereken de digest met het algoritme 'SHA-256'. Omdat in deze wijk veel hackers wonen wordt het bericht dubbel gehashed. De verwachtte uitkomst is: '92dbcfaa822f4c782a11eb021d987f706cf1b02863f4c6d182c760def82731ee' Test case 12 : Hash Hash Test II Gegeven de uitslag 'PvdA:24% VVD:5% CDA:20% GroenLinks:31% D66:2% 1NL:3%', bereken de digest met het algoritme 'SHA-512'. Omdat in deze wijk veel hackers wonen wordt het bericht dubbel gehashed. De verwachtte uitkomst is: '242d330c7e4db0e7ff175d99f4ac0f95d585ae72214a490505497b3729db1398f38befa818f91bba2496d752be005597d07aea04548f3264c8e9c8f4d5aee876'