login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Zelf encryptie maken

Offline DMM - 05/11/2007 18:41
Avatar van DMMPHP beginner Hallo allemaal

Op school maken wij gebruik van de TI 83 rekenmachines. Hierop kan je (eenvoudige) programma's schrijven. Welnu heb ik er eentje geschreven maar graag zou ik het beveiligen door middel van een identificatie. Concreet: indien iemand het juiste wachtwoord intypt, krijgt hij toegang tot het werkelijke programma. Eenvoudigweg kun in je programma zoiets schrijven:
  1. IF invoernaam = "david"
  2. => Juist
  3. ELSE
  4. => Fout


Maar aangezien de code publiek is, kan het wachtwoord meteen bekeken worden. Nu dacht ik er aan om het juiste wachtwoord en het ingetypte te versleutelen en met mekaar te vergelijken. Indien ze hetzelfde zijn, is het wachtwoord juist. Echter, volgens mij is de "versleutelfunctie" niet aanwezig en moet ze dus zelf aangemaakt worden. Een eenvoudige encryptie zou ik kunnen maken, maar de bedoeling is dat het onomkeerbaar is én dat je niets bent met de code voor het creëren van die sleutel.

Weet iemand of dit mogelijk is, zo ja, kan hij mij dan helpen?

Alvast bedankt

David Roelandt

14 antwoorden

Gesponsorde links
Offline Rik - 05/11/2007 18:50
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Het is waarschijnlijk makkelijker om te zorgen dat het programma niet meer kan worden geëdit dan dat je zelf zo'n functie maakt...

Waarschijnlijk heb je wel de MirageOS application op je rekenmachine staan? Daar kan je heel gemakkelijk een programma mee blokkeren. Om te zorgen dat MirageOS hem kan openen ga je naar de eerste regel van je programma en zet daar niets behalve een dubbele punt (alpha + .).

Dan ga je naar MirageOS, zoek je je programma op en druk je op de X,T,Theta,n knop. Dan kies je File door op y= te drukken, vervolgens Info met de knop trace. En dan zoom op je programma te blokkeren.

Nu kan je er via prgm > edit niet meer bij. Als je hem nog een keer locked is hij weer geünlocked.

Hiervoor moet je wel een TI-83 Plus hebben, want de TI-83 heeft geen apps knop.  
Offline Koen - 05/11/2007 18:52
Avatar van Koen PHP expert http://www.ti83...amp;filter=
Probeer daar 'Password-program'
http://www.ti83...sword2.zip
Ik dacht dat dat ongeveer was wat je zocht?
Offline Rik - 05/11/2007 18:57
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Ook een leuke oplossing, alleen kan je dan nog steeds bij het programma als je het echt wilt. Je kan dan die regel waarin je het password programma aanroept weghalen of je kan in het password prog kijken wat de code is. Die getKey codes die je daar als wachtwoord ziet zijn heel simpel terug naar de knoppen te vertalen.
Offline DMM - 05/11/2007 21:03
Avatar van DMM PHP beginner En wat ik voorstelde, is dat mogelijk? Om zo zelf een encryptie te maken?
Offline gothmog - 05/11/2007 21:05
Avatar van gothmog Lid Je zou md5 encryptie om kunnen zetten in rekenmachine taal... lijkt me lastig, maarja uitdaging he;-).
Offline DMM - 05/11/2007 21:18
Avatar van DMM PHP beginner Haha  Ken jij dan de "methode" waarop ze een willekeurige tekenreeks omzetten naar een reeks van 32 getallen?
Offline rroobb - 05/11/2007 21:31
Avatar van rroobb PHP interesse Je kan er toch een protected-program van maken? Dat hij niet in de edit-lijst komt...
Offline Dark_Paul - 06/11/2007 13:28
Avatar van Dark_Paul PHP ver gevorderde Inderdaad, dat is te doen in Basic (die programmeertaal van de GR zelf).
Ik het zelf ook een TI-83 en ik ken het probleem van geen Apps kunnen draaien. Je zou ook AShell erop kunnen zetten (de MirageOS voor de Ti83). Als je je programma's in ASM schrijft en dan op je GR zet kan niemand ze bewerken. Je moet ze dan openen met AShell.
Offline Rik - 06/11/2007 14:33
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Als je echt het md5 algoritme op je rekenmachine gaat maken wordt je programma wel erg langzaam. En omdat je op de TI 83 niet zo heel veel ram hebt is het ook zonde van de ruimte.

Zonder shells en apps zal je in ieder geval wel zelf een algoritme moeten maken of zoeken. Dat ze dan wel zijn te kraken daar kan je dan niets aan doen, maar waarschijnlijk heeft tachtig procent van de gebruikers van je programma toch geen idee hoe dat moet!
Offline ikki007 - 06/11/2007 16:49 (laatste wijziging 06/11/2007 16:50)
Avatar van ikki007 Gouden medailleGouden medaille

PHP ver gevorderde
Citaat:
Haha Ken jij dan de "methode" waarop ze een willekeurige tekenreeks omzetten naar een reeks van 32 getallen?


Citaat:
//Opmerking: Alle variabelen hebben als type een 32-bits integer zonder teken tijdens de berekening

//Definieer r als het volgende
var int[64] r, k
r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}
r[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}
r[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}
r[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}

//Use binary fractional part of the sines of integers as constants:
for i from 0 to 63
k[i] := floor(abs(sin(i + 1)) × 2^32)

//Initialiseer variablen:
var int h0 := 0x67452301
var int h1 := 0xEFCDAB89
var int h2 := 0x98BADCFE
var int h3 := 0x10325476

//Voorbewerking:
voeg "1" bit aan het bericht toe
voeg "0" bits aan bericht toe totdat berichtlengte in bits ≡ 448 (mod 512)
voeg lengte van bericht als 64-bit little-endian integer toe aan bericht

//Verwerk het bericht in opeenvolgende blokken van 512-bit:
for each 512-bit chunk of message
break chunk into sixteen 32-bit little-endian words w(i), 0 ≤ i ≤ 15

//Initialiseer de hashwaarde voor dit blok:
var int a := h0
var int b := h1
var int c := h2
var int d := h3

//Hoofdlus:
for i from 0 to 63
if 0 ≤ i ≤ 15 then
f := (b and c) or ((not b) and d)
g := i
else if 16 ≤ i ≤ 31
f := (d and b) or ((not d) and c)
g := (5×i + 1) mod 16
else if 32 ≤ i ≤ 47
f := b xor c xor d
g := (3×i + 5) mod 16
else if 48 ≤ i ≤ 63
f := c xor (b or (not d))
g := (7×i) mod 16

temp := d
d := c
c := b
b := ((a + f + k(i) + w(g)) leftrotate r(i)) + b
a := temp

//Tel de hash van dit blok op bij het resultaat tot nog toe:
h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d

var int digest := h0 append h1 append h2 append h3 //(uitgedrukt als little-endian)


http://nl.wikipedia.org/wiki/MD5
Offline DMM - 06/11/2007 18:43
Avatar van DMM PHP beginner
Citaat:
Haha Ken jij dan de "methode" waarop ze een willekeurige tekenreeks omzetten naar een reeks van 32 getallen?

Ja, ik had toen nog niet opgezocht of het kon, later wel... Toch bedankt hoor! Het lijkt me wel geen koud kunstje om het te implementeren in de programmacode van mijn ZRM. Bovendien zal het, zoals iemand hierboven zei, veel RAM gebruiken. Kennen jullie misschien een encryptiemethode die iets minder ingewikkeld is?

Bedankt alvast
Offline gothmog - 06/11/2007 20:30
Avatar van gothmog Lid Verzin er zelf één?
Ik denk niet dat het een zware beveiliging moet zijn of wel?
Gewoon letter in cijfer omzetten, deze lekker husselen formule erbij en dan heb je cijfercode.
Offline DMM - 06/11/2007 20:48
Avatar van DMM PHP beginner Een eenvoudige encryptie is inderdaad eenvoudig. Maar het probleem is dat "de mogelijke inbreker" beschikt over:
- de encryptiemethode
- het versleutelde wachtwoord

A.d.h. van deze gegevens mag hij dus niet in staat zijn om het oorspronkelijke wachtwoord te herhalen. En het is hier dat ik niet weet hoe het aan te pakken...
Offline Rik - 06/11/2007 21:19
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Als je een hash functie gebruikt zal zo'n inbreker nooit meer jouw originele wachtwoord terugkrijgen. Het ingevoerde wachtwoord wordt gehashd en vergeleken met het gehashde wachtwoord dat je in het script hebt staan. Een heel simpele hash functie in php:
  1. function getProtectorHash($sPassword) {
  2. $iShift = strlen($sPassword);
  3. $aPassword = str_split($sPassword);
  4. $sEncrypted = '';
  5. $aCharacters = str_split('0123456789abcdefghijklmnopqrstuvwxyz');
  6. $iCharacterCount = count($aCharacters);
  7. foreach ($aPassword as $iKey => $sCharacter) {
  8. $iNumber = $iCharacterCount - array_search($sCharacter, $aCharacters) - $iShift - $iKey - 3;
  9. $iNumber += $iNumber < 0 ? $iCharacterCount : 0;
  10. $iNumber -= $iNumber >= $iCharacterCount ? $iCharacterCount : 0;
  11. $sEncrypted .= $aCharacters[$iNumber];
  12. }
  13. return $sEncrypted;
  14. }
  15. echo getProtectorHash('wachtwoord');

Dat geeft een hash, bij "wachtwoord" bijvoorbeeld: "rc93qmtso1".

Ik heb van dat algoritme een programma voor de rekenmachine gemaakt:
http://files-upload.com/files/603513/PASS.8xp

Ik weet niet of je 8xp's op een 83 kan zetten, maar dat moet je maar ff proberen.  

Overigens is het nog steeds gemakkelijk om het wachtwoord te omzeilen: dan haal je gwn alle code die om een wachtwoord vraagt weg!  
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.42s