您的位置:首页 > 运维架构 > Shell

Powershell用于加密解密方法

2016-08-03 00:53 387 查看
################# 

# Powershell Allows The Loading of .NET Assemblies 

# Load the Security assembly to use with this script  

################# 

[Reflection.Assembly]::LoadWithPartialName("System.Security") 

 ################# 

# This function is to Encrypt A String. 

# $string is the string to encrypt, $passphrase is a second security "password" that has to be passed to decrypt. 

# $salt is used during the generation of the crypto password to prevent password guessing. 

# $init is used to compute the crypto hash -- a checksum of the encryption 

################# 

function Encrypt-String($String, $Passphrase, $salt="SaltCrypto", $init="IV_Password", [switch]$arrayOutput) 



    # Create a COM Object for RijndaelManaged Cryptography

    $r = new-Object System.Security.Cryptography.RijndaelManaged 

    # Convert the Passphrase to UTF8 Bytes

    $pass = [Text.Encoding]::UTF8.GetBytes($Passphrase)

    # Convert the Salt to UTF Bytes

    $salt = [Text.Encoding]::UTF8.GetBytes($salt)

  

    # Create the Encryption Key using the passphrase, salt and SHA1 algorithm at 256 bits

    $r.Key = (new-Object Security.Cryptography.PasswordDeriveBytes $pass, $salt, "SHA1", 5).GetBytes(32) #256/8

    # Create the Intersecting Vector Cryptology Hash with the init

    $r.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($init) )[0..15] 

      

    # Starts the New Encryption using the Key and IV

    $c = $r.CreateEncryptor() 

    # Creates a MemoryStream to do the encryption in

    $ms = new-Object IO.MemoryStream 

    # Creates the new Cryptology Stream --> Outputs to $MS or Memory Stream

    $cs = new-Object Security.Cryptography.CryptoStream $ms,$c,"Write"

    # Starts the new Cryptology Stream

    $sw = new-Object IO.StreamWriter $cs 

    # Writes the string in the Cryptology Stream

    $sw.Write($String) 

    # Stops the stream writer

    $sw.Close() 

    # Stops the Cryptology Stream

    $cs.Close() 

    # Stops writing to Memory

    $ms.Close() 

    # Clears the IV and HASH from memory to prevent memory read attacks

    $r.Clear() 

    # Takes the MemoryStream and puts it to an array

    [byte[]]$result = $ms.ToArray() 

    # Converts the array from Base 64 to a string and returns

    return [Convert]::ToBase64String($result) 

}

 function Decrypt-String($Encrypted, $Passphrase, $salt="SaltCrypto", $init="IV_Password") 



    # If the value in the Encrypted is a string, convert it to Base64

    if($Encrypted -is [string]){ 

        $Encrypted = [Convert]::FromBase64String($Encrypted) 

    } 

  

    # Create a COM Object for RijndaelManaged Cryptography

    $r = new-Object System.Security.Cryptography.RijndaelManaged 

    # Convert the Passphrase to UTF8 Bytes

    $pass = [Text.Encoding]::UTF8.GetBytes($Passphrase) 

    # Convert the Salt to UTF Bytes

    $salt = [Text.Encoding]::UTF8.GetBytes($salt) 

  

    # Create the Encryption Key using the passphrase, salt and SHA1 algorithm at 256 bits     

    $r.Key = (new-Object Security.Cryptography.PasswordDeriveBytes $pass, $salt, "SHA1", 5).GetBytes(32) #256/8     

    # Create the Intersecting Vector Cryptology Hash with the init     

    $r.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($init) )[0..15] 

  

    # Create a new Decryptor

    $d = $r.CreateDecryptor() 

    # Create a New memory stream with the encrypted value.

    $ms = new-Object IO.MemoryStream @(,$Encrypted) 

    # Read the new memory stream and read it in the cryptology stream

    $cs = new-Object Security.Cryptography.CryptoStream $ms,$d,"Read"

    # Read the new decrypted stream

    $sr = new-Object IO.StreamReader $cs 

    # Return from the function the stream

    Write-Output $sr.ReadToEnd() 

    # Stops the stream

    $sr.Close() 

    # Stops the crypology stream

    $cs.Close() 

    # Stops the memory stream

    $ms.Close() 

    # Clears the RijndaelManaged Cryptology IV and Key

    $r.Clear() 



 # This clears the screen of the output from the loading of the assembly. cls 

 # $me will never = 1, so It will run indefinately $me = 0 

    write-host "To End This Application, Close the Window"  

    Write-host ""

do



    # Prompt the user for the password

    $string = read-host "Please Enter User Password"

    # Encrypt the string and store it into the $encrypted variable

    $encrypted = Encrypt-String $string "MyStrongPassword"

    # Write result to the screen

    write-host "Encrypted Password is: $encrypted"

    write-host ""

  

    write-host "Testing Decryption of Password..."

      

    # Decrypts the string and stores the decrypted value in $decrypted

    $decrypted = Decrypt-String $encrypted "MyStrongPassword"

    # Writes the decrpted value to the screen

    write-host "Decrypted Password is: $decrypted"

    write-host ""



 while ($me -ne 1) 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: