Hallo Zusammen,
ich habe ein Programm in Access VBA entwickelt. Die Datenbasis des Programms stützt sich hierbei auf einer MS SQL Datenbank. In dem Programm hat jeder Nutzer einen Account, dessen Passwort mit RC4 (ja ich weiß, nicht mehr zeitgemäß ) verschlüsselt ist.
Nun bin ich dabei eine App zu bauen, in die sich die Nutzer auch einloggen können sollen.
Heißt: Ich muss das RC4 Encryptionprogramm irgendwie in Java übersetzt bekommen.
Nachfolgend der VBA Code:
Das funktioniert in VBA soweit super! Mein Code in Java gibt jedoch falsche Werte raus, sodass sich der Nutzer nicht einloggen kann. Nachfolgender Code:
Leider komme ich nicht weiter.
Hatte eventuell Jemand bereits dieses Thema und weiß, wo hier das Problem liegt?
Besten Dank!
ich habe ein Programm in Access VBA entwickelt. Die Datenbasis des Programms stützt sich hierbei auf einer MS SQL Datenbank. In dem Programm hat jeder Nutzer einen Account, dessen Passwort mit RC4 (ja ich weiß, nicht mehr zeitgemäß ) verschlüsselt ist.
Nun bin ich dabei eine App zu bauen, in die sich die Nutzer auch einloggen können sollen.
Heißt: Ich muss das RC4 Encryptionprogramm irgendwie in Java übersetzt bekommen.
Nachfolgend der VBA Code:
Code:
Public Function RC4(ByVal Expression As String, ByVal Password As String) As String
Dim rb(0 To 255) As Integer, x As Long, y As Long, z As Long, key() As Byte, bytearray() As Byte, temp As Byte
If Len(Password) = 0 Then
Exit Function
End If
If Len(Expression) = 0 Then
Exit Function
End If
If Len(Password) > 256 Then
key() = StrConv(Left$(Password, 256), vbFromUnicode)
Else
key() = StrConv(Password, vbFromUnicode)
End If
For x = 0 To 255
rb(x) = x
Next x
x = 0
y = 0
z = 0
For x = 0 To 255
y = (y + rb(x) + key(x Mod Len(Password))) Mod 256
temp = rb(x)
rb(x) = rb(y)
rb(y) = temp
Next x
x = 0
y = 0
z = 0
bytearray() = StrConv(Expression, vbFromUnicode)
For x = 0 To Len(Expression) - 1
y = (y + 1) Mod 256
z = (z + rb(y)) Mod 256
temp = rb(y)
rb(y) = rb(z)
rb(z) = temp
bytearray(x) = bytearray(x) Xor (rb((rb(y) + rb(z)) Mod 256))
Next x
RC4 = StrConv(bytearray, vbUnicode)
End Function
Das funktioniert in VBA soweit super! Mein Code in Java gibt jedoch falsche Werte raus, sodass sich der Nutzer nicht einloggen kann. Nachfolgender Code:
Code:
public static String RunRC4(String expression, String password) {
int kLen = 0, x = 0, y = 0, i = 0, j = 0, temp = 0;
int[] rb = new int[500];
int[] key = new int[500];
String RunRC4 = "";
String finalChar = "";
kLen = password.length();
for (i = 0; i <= 255; i++) {
rb[i] = i;
String s1 = "";
int modular = i % kLen;
s1 = password.substring(modular, modular + 1);
char c1 = s1.charAt(0);
key[i] = (int) c1;
}
j = 0;
for (i = 0; i <= 255; i++) {
j = (j + key[i] + rb[i]) % 0xFF; //war 255
temp = rb[i];
rb[i] = rb[j];
rb[j] = temp;
}
// 'Drop n bytes from keystream
x = 0;
y = 0;
for (i = 0; i <= 255; i++) {
x = (x + 1) % 0xFF; //war 255
y = (y + rb[x]) % 0xFF; //war 255
temp = rb[x];
rb[x] = rb[y];
rb[y] = temp;
}
// 'Encode/Decode
for (i = 0; i <= expression.length(); i++) {
x = (x + 1) % 0xFF; //war 255
y = (y + rb[x]) % 0xFF; //war 255
temp = rb[x];
rb[x] = rb[y];
rb[y] = temp;
String s2 = expression.substring(i);
if (s2.equalsIgnoreCase("")) {
return finalChar;
} else {
char c2 = s2.charAt(0);
int xy = rb[x] + rb[y];
int value = rb[xy % 0xFF]; //war 255
RunRC4 = RunRC4 + (value ^ (int) c2);
finalChar = finalChar
+ (Character.toString((char) Integer.parseInt(RunRC4)));
RunRC4 = "";
}
}
return finalChar;
}
Leider komme ich nicht weiter.
Hatte eventuell Jemand bereits dieses Thema und weiß, wo hier das Problem liegt?
Besten Dank!