[PHP]PC1 Cipher Algoritme

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • hornage
  • Registratie: November 2001
  • Laatst online: 24-09-2024
Voor het werk moet ik dit algoritme implementeren in PHP. Ik heb eerst gezocht op internet of dit al te vinden was. Ik vond het in vele programmeertalen, maar niet in PHP.

Hierna heb ik getracht het te maken vanaf een C++ source code die staat op onderstaande link
http://membres.lycos.fr/pc1/pk128.cpp

Dit was echter ook niet succesvol. Ik heb het draaiend zonder foutmelding, maar de ouput is niet kloppend.

Heeft iemand misschien een idee?

[ Voor 3% gewijzigd door hornage op 05-12-2007 14:09 ]


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Heeft iemand misschien een idee?
Heb je al gedebugged?
of toevallig deze code liggen?
scriptrequest enzo...


Desnoods compileer je die c-code en roep je hem aan met een system() call.

[ Voor 22% gewijzigd door Grijze Vos op 05-12-2007 13:52 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Plak eens hier wat ge al in mekaar hebt geflanst, dan kunnen we eens kijken. Stap er eens door, tegelijkertijd met een C++ debugger, als een PHP debugger, zodat ge mooi kunt kijken op welke stap het fout gaat :)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • hornage
  • Registratie: November 2001
  • Laatst online: 24-09-2024
Ah, ik ben niet zo'n C++ held, welke C++ en PHP debugger raden jullie aan om dit te testen?

en aanroepen met een system() call?

en bij deze de code:
PHP:
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
    class PC1algorithm {
        var $pkax;
        var $pkbx;
        var $pkcx;
        var $pkdx;
        var $pksi;
        var $pktmp;
        var $x1a2;
        var $pkres;
        var $pki;
        var $inter;
        var $cfc;
        var $cfd;
        var $compte;
        var $x1a0;
      var $cle;
        var $pkc;
        var $plainlen;
        var $ascipherlen;
        var $plainText;
        var $ascCipherText;

        function PC1algorithm() {
            for ($j=0;$j<=16;$j++) {
                $cle[$j] = 0;
            }
            for ($j=0;$j<=8;$j++)   {
                $x1a0[$j] = 0;
            }
            $pkax = 0;
            $pkbx = 0;
            $pkcx = 0;
            $pkdx = 0;
            $pksi = 0;
            $pktmp = 0;
            $x1a2 = 0;
            $pkres = 0;
            $pki = 0;
            $inter = 0;
            $cfc = 0;
            $cfd = 0;
            $compte = 0;
            $pkc = 0;
        }


        function pkfin() {
            for ($j=0;$j<=16;$j++) {
                $cle[$j] = 0;
            }
            for ($j=0;$j<=8;$j++) {
                $x1a0[$j] = 0;
            }
            $pkax = 0;
            $pkbx = 0;
            $pkcx = 0;
            $pkdx = 0;
            $pksi = 0;
            $pktmp = 0;
            $x1a2 = 0;
            $pkres = 0;
            $pki = 0;
            $inter = 0;
            $cfc = 0;
            $cfd = 0;
            $compte = 0;
            $pkc = 0;
        }

        function pkcode() {
            $pkdx = $this->x1a2 + $this->pki;
            $pkax = $this->x1a0[$this->pki];
            $pkcx = "0x015a";
            $pkbx = "0x4e35";
            $pktmp = $pkax;
            $pkax = $this->pksi;
            $pksi = $pktmp;
            $pktmp = $pkax;
            $pkax = $pkdx;
            $pkdx = $pktmp;
            if ($pkax != 0) {
                $pkax = $pkax * $pkbx;
            }
            $pktmp = $pkax;
            $pkax = $pkcx;
            $pkcx = $pktmp;
            if ($pkax != 0) {
                $pkax = $pkax * $pksi;
                $pkcx = $pkax + $pkcx;
            }
            $pktmp = $pkax;
            $pkax = $pksi;
            $pksi = $pktmp;
            $pkax = $pkax * $pkbx;
            $pkdx = $pkcx + $pkdx;
            $pkax++;
            $x1a2 = $pkdx;
            $x1a0[$this->pki] = $pkax;
            $pkres = $pkax XOR $pkdx;
            $this->pki++;
        }

        function pkassemble() {
            $x1a0[0] = ($this->cle[0] * 256) + $this->cle[1];
            $this->pkcode();
            $inter = $this->pkres;

            $x1a0[1] = $x1a0[0] XOR (($this->cle[2] * 256) + $this->cle[3]);
            $this->pkcode();
            $inter = $inter XOR $this->pkres;

            $x1a0[2] = $x1a0[1] XOR (($this->cle[4] * 256) + $this->cle[5]);
            $this->pkcode();
            $inter = $inter XOR $this->pkres;

            $x1a0[3] = $x1a0[2] XOR (($this->cle[6] * 256) + $this->cle[7]);
            $this->pkcode();
            $inter = $inter XOR $this->pkres;

            $x1a0[4] = $x1a0[3] XOR (($this->cle[8] * 256) + $this->cle[9]);
            $this->pkcode();
            $inter = $inter XOR $this->pkres;

            $x1a0[5] = $x1a0[4] XOR (($this->cle[10] * 256) + $this->cle[11]);
            $this->pkcode();
            $inter = $inter XOR $this->pkres;

            $x1a0[6] = $x1a0[5] XOR (($this->cle[12] * 256) + $this->cle[13]);
            $this->pkcode();
            $inter = $inter XOR $this->pkres;

            $x1a0[7] = $x1a0[6] XOR (($this->cle[14] * 256) + $this->cle[15]);
            $this->pkcode();
            $inter = $inter XOR $this->pkres;

            $pki=0;
        }

        function ascii_encrypt128($in, $key) {
            $k = 0;
            $this->pkfin();
            $plainlen = strlen($in);
            for ($count=0;$count<strlen($key);$count++) {
                $cle[$count] = $key[$count];
            }
            $cle[$count] = '\0';

//          $ascCipherText = 2 * $plainlen * sizeof($char) + 1;
            for ($count=0;$count<=$plainlen-1;$count++) {
                $pkc = $in[$count];

                $this->pkassemble();
                $cfc = $this->inter >> 8;
                $cfd = $this->inter & 255;

                for ($compte=0;$compte<=sizeof($this->cle);$compte++) {
                    $cle[$compte] = $cle[$compte] XOR $pkc;
                }
                $pkc = $pkc XOR ($cfc XOR $cfd);

                $pkd = ($pkc >> 4);
                $pke = ($pkc & 15);

                $ascCipherText[$k] = 0x61 + $pkd;
                $k++;
                $ascCipherText[$k] = 0x61 + $pke;
                $k++;
            }
            $ascCipherText[$k] = '\0';
            return implode("", $ascCipherText);
        }

        function ascii_decrypt128($in, $key) {
            $k = 0;
            $this->pkfin();
            $ascipherlen = strlen($in);
            for ($count=0;$count<sizeof($key);$count++) {
                $cle[$count] = $key[$count];
            }
            $cle[$count] = '\0';

//          $plainText = $ascipherlen / 2 * sizeof($char) + 1;

            for ($count=0;$count<$ascipherlen/2;$count++) {
                $pkd = $in[$k];
                $k++;
                $pke = $in[$k];
                $k++;

                $pkd = $pkd - 0x61;
                $pkd = $pkd << 4;

                $pke = $pke - 0x61;
                $pkc = $pkd + $pke;

                $this->pkassemble();
                $cfc = $inter >> 8;
                $cfd = $inter & 255;

                $pkc = $pkc XOR ($cfc XOR $cfd);

                for ($compte=0;$compte<=15;$compte++) {
                    $cle[$compte] = $cle[$compte] XOR $pkc;
                }
                $plainText[$count] = $pkc;

            }
            $plainText[$count] = '\0';
        }
    }

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
hornage schreef op woensdag 05 december 2007 @ 13:48:
Hierna heb ik getracht het te maken vanaf een C++ source code die staat op onderstaande link
http://membres.lycos.fr/pc1/pk128.cpp

Dit was echter ook niet succesvol. Ik heb het draaiend zonder foutmelding, maar de ouput is niet kloppend.
Heb je de afzonderlijke functies al eens getest en gekeken wat er uit komt/moet komen? Als je ergens een verschil in vindt weet je waar je moet zoeken; post in dat geval de relevante code hier als je er niet uit komt.
hornage schreef op woensdag 05 december 2007 @ 13:48:
Heeft iemand misschien een idee of toevallig deze code liggen?
We doen hier niet aan scriptrequests ;)

[edit]
Ah, je hebt al code gepost. Ik denk alleen dat je, wat me zo althans opvalt, '\0' wat te letterlijk neemt ;)

Je kunt het natuurlijk makkelijk testen (ook zonder debuggers) door in beide stukken code op strategische plaatsen wat waardes te outputten en die langs elkaar te leggen. Zo moet je relatief vlug kunnen vinden waar het 'verschil' zit.

[ Voor 16% gewijzigd door RobIII op 05-12-2007 14:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • hornage
  • Registratie: November 2001
  • Laatst online: 24-09-2024
excuus voor scriptrequest mensen, ik haal het wel ff uit mijn OP

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Waar je sowieso de fout in gaat is regel 73 en 74. In het C programmatje worden daar twee bytes aan de variabele toegekend terwijl jij er een string aan toekent. Dat is natuurlijk niet hetzelfde.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • hornage
  • Registratie: November 2001
  • Laatst online: 24-09-2024
Janoz schreef op woensdag 05 december 2007 @ 14:18:
Waar je sowieso de fout in gaat is regel 73 en 74. In het C programmatje worden daar twee bytes aan de variabele toegekend terwijl jij er een string aan toekent. Dat is natuurlijk niet hetzelfde.
Daar heb gelijk in, ik heb nu de quotes weggehaald. Ouput is onveranderd echter.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

hornage schreef op woensdag 05 december 2007 @ 14:29:
[...]

Daar heb gelijk in, ik heb nu de quotes weggehaald. Ouput is onveranderd echter.
Dit al gelezen? De \0 is de string terminator in C/C++. Hoe dat moet in PHP weet ik niet... Ik denk zelfs niet dat het moet.
RobIII schreef op woensdag 05 december 2007 @ 14:06:
[...]


[edit]
Ah, je hebt al code gepost. Ik denk alleen dat je, wat me zo althans opvalt, '\0' wat te letterlijk neemt ;)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • hornage
  • Registratie: November 2001
  • Laatst online: 24-09-2024
Snake schreef op woensdag 05 december 2007 @ 14:36:
[...]

Dit al gelezen? De \0 is de string terminator in C/C++. Hoe dat moet in PHP weet ik niet... Ik denk zelfs niet dat het moet.

[...]
Dat had ik nog niet gelezen. Ik heb nu de regels weggehaald die de \0 neerzetten.
Output is nu wel veranderd, de \0 aan het einde is uiteraard weg.
Ik ga maar eens ff C++ Builder installeren om te kunnen testen

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

hornage schreef op woensdag 05 december 2007 @ 14:42:
[...]

Dat had ik nog niet gelezen. Ik heb nu de regels weggehaald die de \0 neerzetten.
Output is nu wel veranderd, de \0 aan het einde is uiteraard weg.
Ik ga maar eens ff C++ Builder installeren om te kunnen testen
Of de Express Edition van Visual Studio 2005, voor C++. Werkt heerlijk, en is heel visueel ingesteld.

Going for adventure, lots of sun and a convertible! | GMT-8

Pagina: 1