Bueno aquí va el mio, mis conocimientos en criptografía son bastante escasos pero bueno. El IV que utilizo lo introduzco dentro de la cadena cifrada para no depender de él en el descifrado.
Gracias al gay de Scorpio por testear
Código: Seleccionar todo
Cadena Cifrada: lz{'kl?l'Jpmyhkv
Salida: Test de Cifrado
Func _Cifrar($sString, $sClave)
Local $sIV = Random(10, 99, 1)
Local $sAscIV = ChrW($sIV)
Local $sArrayString = StringToASCIIArray($sString)
Local $sOperacion, $sReturn
For $i = 0 to UBound($sArrayString) - 1
$sOperacion = $sArrayString[$i] + $sIV
$sIV += AscW(BinaryToString($sClave, 2)) - BitXOR(StringLen($sClave), $sIV)
$sReturn = $sReturn & $sOperacion & '.'
Next
Local $sRecorte = StringTrimRight($sReturn, 1)
Local $sFiltrado = StringSplit($sRecorte, '.', 1)
Local $sConvert = StringFromASCIIArray($sFiltrado)
Local $sCifrado = StringMid($sConvert, 1, StringLen($sConvert) / 2) & $sAscIV & StringMid($sConvert, StringLen($sConvert) / 2)
Return $sCifrado
EndFunc
Func _Descifrar($sString, $sClave)
Local $sPrimeraMitad = StringMid($sString, 1,(StringLen($sString) / 2) - 1)
Local $sSegundaMitad = StringMid($sString, (StringLen($sString) / 2) + 2)
Local $sRecortando = StringTrimLeft($sString, StringLen($sPrimeraMitad))
Local $sRecortando2 = StringTrimRight($sRecortando, StringLen($sSegundaMitad))
$sString = $sPrimeraMitad & $sSegundaMitad
Local $sIV = AscW($sRecortando2)
Local $sArrayString = StringToASCIIArray($sString)
Local $sOperacion, $sReturn
For $i = 1 to UBound($sArrayString) - 1
$sOperacion = $sArrayString[$i] - $sIV
$sIV += AscW(BinaryToString($sClave, 2)) - BitXOR(StringLen($sClave), $sIV)
$sReturn = $sReturn & $sOperacion & '.'
Next
Local $sFiltrado = StringSplit($sReturn, '.', 1)
Local $sASCIItoString = StringFromASCIIArray($sFiltrado)
Local $sDescifrado = StringTrimLeft($sASCIItoString, 1)
Return $sDescifrado
EndFunc
Como nadie se animo a hacer la GUI, aquí dejo la mía por si quieren testear.
Link:
[Enlace externo eliminado para invitados]
Pass: Indetectables.net
Saludos