TripleDES
En criptografía, Triple DES se le llama al algoritmo que hace triple cifrado del DES. También es conocido como TDES o 3DES, en 1998 IBM desarrollo 3DES o Triple DES que sería sucesor directo de DES.
El Triple DES está desapareciendo lentamente, siendo reemplazado por el algoritmo AES. Sin embargo, la mayoría de las tarjetas de crédito y otros medios de pago electrónicos tienen como estándar el algoritmo Triple DES (anteriormente usaban el DES). Por su diseño, el DES y por lo tanto el TDES son algoritmos lentos. AES puede llegar a ser hasta 6 veces más rápido y hasta la fecha no se ha encontrado ninguna vulnerabilidad.
Cifrar y descifrar con TripleDES desde PowerShell
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 |
$TDESKEY = "11111111111111111111111111111111" # CIFRAR $password = "Im a password" $MS = New-Object System.IO.MemoryStream $keyb = [Convert]::FromBase64String($TDESKEY) $TD = New-Object System.Security.Cryptography.TripleDESCryptoServiceProvider $CS = New-Object System.Security.Cryptography.CryptoStream($MS,$TD.CreateEncryptor($keyb, $TD.IV), [System.Security.Cryptography.CryptoStreamMode]::Write) $Writer = New-Object System.IO.StreamWriter($CS) $Writer.Write($password) $Writer.Flush() $CS.FlushFinalBlock() #$MS.Seek(0, [System.IO.SeekOrigin]::Begin) > NULL #not sure of its utility $EncodedText = [Convert]::ToBase64String($MS.ToArray()) $IVS = [Convert]::ToBase64String($TD.IV) $EncryptedData = "${IVS}:$EncodedText" $Writer.Dispose() $EncryptedData ##DESCIFRAR $Data = $EncryptedData.Split(':') $TD = New-Object System.Security.Cryptography.TripleDESCryptoServiceProvider $Key = [Convert]::FromBase64String($TDESKEY) $IV = [Convert]::FromBase64String($Data[0]) $DataByte = [Convert]::FromBase64String($Data[1]) $MS = New-Object System.IO.MemoryStream(,$DataByte) #array of one item must have a preceding coma $CS = New-Object System.Security.Cryptography.CryptoStream($MS,$TD.CreateDecryptor($Key,$IV), [System.Security.Cryptography.CryptoStreamMode]::Read) $Reader = New-Object System.IO.StreamReader($CS) $Result = $Reader.ReadToEnd() $Reader.Dispose() $Result |