Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Crypt Class - Nach Update alte files nicht mehr brauchbar...


  • Please log in to reply
6 replies to this topic
fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012
Hallo zusammen!

Ich nutze die Class aus diesem Thread:
http://www.autohotke...yption-hashing/

Bisher in einer älteren Version.

Nun habe ich gestern gesehen das es eine neuere gibt. Dachte mir, kann ja nicht schaden, hab sie alste ersetzt. Nun kann ich aber obwohl das Passwort richtig ist die Files nicht mehr entschlüsseln. Mit der alten Version gehts, mit der neuen nicht. Einmal entschlüsselt und mit der neuen Version neu verschlüsselt klappts dann auch mit der neuen.

Kann mir da einer von euch erklären warum? Sollte sowas nicht eigentlich vermieden werden? Ich nutze die Classe im Unternehmen und wollte die neue nun per Update rausgeben. Hätte ich das getan ohne zu testen könnte nun keiner mehr die Software nutzen.

Gibt es von der alten zur neuen Version einen Sicherheitsaspekt der das Update ratsam macht? Oder ist es im Grunde egal und ich kann auch bei der alten bleiben?

Hier die alte und die neue Version:

Alt: CryptAlt.zip
Neu: CryptNeu.zip
Download ist jeweils in der Mitte der Seite.

Danke für eure Zeit

MfG
fump

fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012
Hab nochmal geprüft, keine der Dateien die mit dem alten Class verschlüsselt wurden lassen sich mit der neuen Class entschlüsseln.

Ich blick nicht warum... vllt. ja einer von Euch.

nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
Er benutzt zwei verschiedene Verschlüsselungs mechanismen
;Nr1 Alt
ByteToHash(ByRef pbData,dwLen)
{
if (dwLen < 1)
  return 0
if pbData is integer
  ptr := pbData
else
  ptr := &pbData
SetFormat,integer,Hex
loop,%dwLen%
{
  num := numget(ptr+0,A_index-1,"UChar")
  hash .= substr((num >> 4),0) . substr((num & 0xf),0)
}
SetFormat,integer,D
return hash
}
HashToByte(sHash,ByRef ByteBuf)
{
if (sHash == "" || RegExMatch(sHash,"[^\dABCDEF]") || mod(StrLen(sHash),2))
  return 0
BufLen := StrLen(sHash)/2
VarSetCapacity(ByteBuf,BufLen,0)
loop,%BufLen%
{
  num1 := (p := "0x" . SubStr(sHash,(A_Index-1)*2+1,1)) << 4
  num2 := "0x" . SubStr(sHash,(A_Index-1)*2+2,1)
  num := num1 | num2
  NumPut(num,ByteBuf,A_Index-1,"UChar")
}
return BufLen
}
;Nr2 Neu
b64Encode( ByRef buf, bufLen )
{
DllCall( "crypt32\CryptBinaryToStringA", "ptr", &buf, "UInt", bufLen, "Uint", 1 | 0x40000000, "Ptr", 0, "UInt*", outLen )
VarSetCapacity( outBuf, outLen, 0 )
DllCall( "crypt32\CryptBinaryToStringA", "ptr", &buf, "UInt", bufLen, "Uint", 1 | 0x40000000, "Ptr", &outBuf, "UInt*", outLen )
return strget( &outBuf, outLen, "CP0" )
}
b64Decode( b64str, ByRef outBuf )
{
   static CryptStringToBinary := "crypt32\CryptStringToBinary" (A_IsUnicode ? "W" : "A")
   DllCall( CryptStringToBinary, "ptr", &b64str, "UInt", 0, "Uint", 1, "Ptr", 0, "UInt*", outLen, "ptr", 0, "ptr", 0 )
   VarSetCapacity( outBuf, outLen, 0 )
   DllCall( CryptStringToBinary, "ptr", &b64str, "UInt", 0, "Uint", 1, "Ptr", &outBuf, "UInt*", outLen, "ptr", 0, "ptr", 0 )
   return outLen
}

Visit the new forum ahkscript.org.

http://ahkscript.org


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012
Aber an den Funktionsaufruf habe ich nichts geändert. Wie kann ich denn bei der neuen Classe dennoch die alte Variante verwenden?

so wirds in den Scripten jetzt gemacht:

Decrypt:
Crypt.Encrypt.StrDecryptToFile(hash,"logins.txt",passDeEnc,7, 6)

Encrypt:
cv.Write(Crypt.Encrypt.FileEncryptToStr("logins.txt",passEncoding,7, 6))

MfG
fump

IsNull
  • Moderators
  • 990 posts
  • Last active: May 15 2014 11:56 AM
  • Joined: 10 May 2007
Das Problem liegt wohl darin, dass bei gewissen Methoden die Ascii Variante anstatt der WideString (Unicode) Version aufgerufen wird:
DllCall( "crypt32\CryptBinaryToStringA"

An anderer Stelle stimmt es dann wieder - ich glaube sogar der Code ist von mir^^
static CryptStringToBinary := "crypt32\CryptStringToBinary" (A_IsUnicode ? "W" : "A")

Da wird je nach AHK Version die richtige Funktion verwendet.

fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012
Naja dann bleib ich wohl zwecks Kompatibilität bei der alten Version des Scripts oder gibt es da einen Grund der dagegen spricht?

nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
es gaht schon noch die alte variante zu verwenden
du kopierst einfach die alten für Decrypt und encrypt benötigten teile unter neuem namen in die neue lib

Visit the new forum ahkscript.org.

http://ahkscript.org