powershell 算法

1.AES

#加密
$key="aes256keyaes256keyaes256keyaes25";
$test="1111111111111111111111111111111111111111111111111"
$aes_obj = New-Object "System.Security.Cryptography.AesManaged";
$aes_obj.Mode = [System.Security.Cryptography.CipherMode]::ECB;
$aes_obj.BlockSize = 128;
$aes_obj.KeySize = 256;
$aes_obj.Key = [System.Text.Encoding]::UTF8.GetBytes($key);
$aes_obj.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7;
$in_text=[System.Text.Encoding]::UTF8.GetBytes($test);
$data = New-Object System.IO.MemoryStream(,$aes_obj.CreateEncryptor().TransformFinalBlock($in_text,0,$in_text.Length));
$ret=[System.Convert]::ToBase64String($data.ToArray());
Write-Host $ret;
$aes_obj.Dispose();

#輸出 Si6rEIOwyVivcfsUG5Gz00ouqxCDsMlYr3H7FBuRs9NKLqsQg7DJWK9x+xQbkbPTDGEetru8uf6iFaWXvuyWEQ==
#解密

$key="aes256keyaes256keyaes256keyaes25";
$ret="Si6rEIOwyVivcfsUG5Gz00ouqxCDsMlYr3H7FBuRs9NKLqsQg7DJWK9x+xQbkbPTDGEetru8uf6iFaWXvuyWEQ=="
$aes_obj1 = New-Object "System.Security.Cryptography.AesManaged";
$aes_obj1.Mode = [System.Security.Cryptography.CipherMode]::ECB;
$aes_obj1.BlockSize = 128;
$aes_obj1.KeySize = 256;
$aes_obj1.Key = [System.Text.Encoding]::UTF8.GetBytes($key);
$aes_obj1.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7;


$out= [System.Convert]::FromBase64String($ret)
$io_obj = New-Object System.IO.MemoryStream
$en_data = New-Object System.IO.MemoryStream(,$aes_obj1.CreateDecryptor().TransformFinalBlock($out,0,$out.Length));
$en_data.CopyTo($io_obj)
$en_data.Close();
$en = [System.Text.Encoding]::UTF8.GetString($io_obj.ToArray());
$aes_obj1.Dispose();

Write-Host $en

#輸出 1111111111111111111111111111111111111111111111111

powershell5.0

class encrypt
{
    static [string]aes_encrypt($key,$text)
    {
        $aes_obj = New-Object "System.Security.Cryptography.AesManaged";
        $aes_obj.Mode = [System.Security.Cryptography.CipherMode]::ECB;
        $aes_obj.BlockSize = 128;
        $aes_obj.KeySize = 256;
        $aes_obj.Key = [System.Text.Encoding]::UTF8.GetBytes($key);
        $aes_obj.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7;
        $in_text=[System.Text.Encoding]::UTF8.GetBytes($text);
        $data = New-Object System.IO.MemoryStream(,$aes_obj.CreateEncryptor().TransformFinalBlock($in_text,0,$in_text.Length));
        $ret=[System.Convert]::ToBase64String($data.ToArray());
        #Write-Host $ret;
        $aes_obj.Dispose();
        return $ret;
    }

    static  [string]aes_decrypt($key,$text)
    {
        $aes_obj1 = New-Object "System.Security.Cryptography.AesManaged";
        $aes_obj1.Mode = [System.Security.Cryptography.CipherMode]::ECB;
        $aes_obj1.BlockSize = 128;
        $aes_obj1.KeySize = 256;
        $aes_obj1.Key = [System.Text.Encoding]::UTF8.GetBytes($key);
        $aes_obj1.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7;


        $out= [System.Convert]::FromBase64String($text)
        $io_obj = New-Object System.IO.MemoryStream
        $en_data = New-Object System.IO.MemoryStream(,$aes_obj1.CreateDecryptor().TransformFinalBlock($out,0,$out.Length));
        $en_data.CopyTo($io_obj)
        $en_data.Close();
        $en = [System.Text.Encoding]::UTF8.GetString($io_obj.ToArray());
        $aes_obj1.Dispose();
        $io_obj.close();
        return $en;
    }

    static [string]aes_encrypt_CBC($key,$text)
    {
        $aes_obj = New-Object "System.Security.Cryptography.AesManaged";
        $aes_obj.Mode = [System.Security.Cryptography.CipherMode]::CBC;
        $aes_obj.BlockSize = 128;
        $aes_obj.KeySize = 256;
        $iv="1234567890123456";
        $aes_obj.iv = [System.Text.Encoding]::UTF8.GetBytes($iv);
        $aes_obj.Key = [System.Text.Encoding]::UTF8.GetBytes($key);
        $aes_obj.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7;
        $in_text=[System.Text.Encoding]::UTF8.GetBytes($text);
        $data = New-Object System.IO.MemoryStream(,$aes_obj.CreateEncryptor().TransformFinalBlock($in_text,0,$in_text.Length));
        $ret=[System.Convert]::ToBase64String($data.ToArray());
        #Write-Host $ret;
        $aes_obj.Dispose();
        return $ret;
    }

    static  [string]aes_decrypt_cbc($key,$text)
    {
        $aes_obj1 = New-Object "System.Security.Cryptography.AesManaged";
        $aes_obj1.Mode = [System.Security.Cryptography.CipherMode]::CBC;
        $aes_obj1.BlockSize = 128;
        $aes_obj1.KeySize = 256;
        $iv="1234567890123456";
        $aes_obj1.iv = [System.Text.Encoding]::UTF8.GetBytes($iv);
        $aes_obj1.Key = [System.Text.Encoding]::UTF8.GetBytes($key);
        $aes_obj1.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7;


        $out= [System.Convert]::FromBase64String($text)
        $io_obj = New-Object System.IO.MemoryStream
        $en_data = New-Object System.IO.MemoryStream(,$aes_obj1.CreateDecryptor().TransformFinalBlock($out,0,$out.Length));
        $en_data.CopyTo($io_obj)
        $en_data.Close();
        $en = [System.Text.Encoding]::UTF8.GetString($io_obj.ToArray());
        $aes_obj1.Dispose();
        $io_obj.close();
        return $en;
    }
}
$key="aes256keyaes256keyaes256keyaes25";
$test="1111111111111111111111111111111111111111111111111";

$test1=[encrypt]::aes_encrypt($key,$test);
write-host $test1

$test2=[encrypt]::aes_decrypt($key,$test1);
write-host $test2


$test3=[encrypt]::aes_encrypt_cbc($key,$test);
write-host $test3

$test4=[encrypt]::aes_decrypt_cbc($key,$test3);
write-host $test4

2.md5/sha1/sha256

$input="1111111111111111111111111111111111111111111"
$algorithm = 'sha256'#[sha|md5|sha256|sha512]
$hasher = [System.Security.Cryptography.HashAlgorithm]::create($algorithm)
$in_text=[System.Text.Encoding]::UTF8.GetBytes($input);
$hash = $hasher.ComputeHash($in_text)
#[system.bitconverter]::tostring($hash)
$hash=[system.bitconverter]::tostring($hash).ToLower().replace('-','')
write-host $algorithm,$hash

https://gist.github.com/kennwhite/ea5c371ed784bf68ab3f

# Simple powershell (built-in to Win7/8) utility script
#  to compute sha256 (or md5, sha1 or sha512) of a file
#
# Usage:
# C:\> powershell
# PS .\hash filename.ext [sha|md5|sha256|sha512]
#
# May require: Control Panel/System/Admin/Windows Power Shell Modules, then: set-executionpolicy remotesigned
#
# Based on James Manning's and Mike Wilbur's get-hashes and get-sha256 MSDN scripts
#
param(
    [string] $file = $(throw "A filename is required. Usage: .\hash filename.ext [sha|md5|sha256|sha512]"),
    [string] $algorithm = 'sha256'
)
$fileStream = [system.io.file]::openread((resolve-path $file))
$hasher = [System.Security.Cryptography.HashAlgorithm]::create($algorithm)
$hash = $hasher.ComputeHash($fileStream)
$fileStream.close()
$fileStream.dispose()
[system.bitconverter]::tostring($hash).ToLower().replace('-','')+" '"+$file+"' "+$algorithm+"`r`n"

3.rc4

https://www.remkoweijnen.nl/blog/2013/04/05/rc4-encryption-in-powershell/

function BinToHex {
	param(
    [Parameter(
        Position=0, 
        Mandatory=$true, 
        ValueFromPipeline=$true)
	]
	[Byte[]]$Bin)
	# assume pipeline input if we don't have an array (surely there must be a better way)
	if ($bin.Length -eq 1) {$bin = @($input)}
	$return = -join ($Bin |  foreach { "{0:X2}" -f $_ })
	Write-Output $return
}

function HexToBin {
	param(
    [Parameter(
        Position=0, 
        Mandatory=$true, 
        ValueFromPipeline=$true)
	]	
	[string]$s)
	$return = @()
	
	for ($i = 0; $i -lt $s.Length ; $i += 2)
	{
		$return += [Byte]::Parse($s.Substring($i, 2), [System.Globalization.NumberStyles]::HexNumber)
	}
	
	Write-Output $return
}

function rc4 {
	param(
    	[Byte[]]$data,
    	[Byte[]]$key
  	)

	# Make a copy of the input data
	[Byte[]]$buffer = New-Object Byte[] $data.Length
	$data.CopyTo($buffer, 0)
	
	[Byte[]]$s = New-Object Byte[] 256;
    [Byte[]]$k = New-Object Byte[] 256;

    for ($i = 0; $i -lt 256; $i++)
    {
        $s[$i] = [Byte]$i;
        $k[$i] = $key[$i % $key.Length];
    }

    $j = 0;
    for ($i = 0; $i -lt 256; $i++)
    {
        $j = ($j + $s[$i] + $k[$i]) % 256;
        $temp = $s[$i];
        $s[$i] = $s[$j];
        $s[$j] = $temp;
    }

    $i = $j = 0;
    for ($x = 0; $x -lt $buffer.Length; $x++)
    {
        $i = ($i + 1) % 256;
        $j = ($j + $s[$i]) % 256;
        $temp = $s[$i];
        $s[$i] = $s[$j];
        $s[$j] = $temp;
        [int]$t = ($s[$i] + $s[$j]) % 256;
        $buffer[$x] = $buffer[$x] -bxor $s[$t];
    }

	return $buffer
}


#Example:


$enc = [System.Text.Encoding]::ASCII
# The data we're going to encrypt
[Byte[]]$data = $enc.GetBytes("Hello World!")
# The key we're going to use
[Byte[]]$key = $enc.GetBytes("SECRET")

# Encryp the data, a byte array is returned
$EncryptedBytes = rc4 $data $key

# Convert the byte array into a hex string so we eg save it to disk
$EncryptedString = BinToHex $EncryptedBytes

# Now decrypt the data
[Byte[]]$data = HexToBin $EncryptedString
$DecryptedBytes = rc4 $data $key
$DecryptedString = $enc.GetString($DecryptedBytes)

4.des

http://qshino.hatenablog.com/entry/2017/03/14/233735

function get-des($in, $key) {
    $des = New-Object System.Security.Cryptography.DESCryptoServiceProvider
    $des.Padding = [System.Security.Cryptography.PaddingMode]::Zeros

    $des.Key = [System.Text.Encoding]::ASCII.GetBytes($key)
    $des.IV  = [Byte[]](0,0,0,0,0,0,0,0)

    $ib = [System.Text.Encoding]::ASCII.GetBytes($in)
    $params = ($ib, 0, $ib.Length)

    $encrypter = $des.CreateEncryptor()
    $eb = [System.Security.Cryptography.ICryptoTransform].GetMethod("TransformFinalBlock").Invoke($encrypter , $params)
   $encrypter.Dispose()
   $eb
}

function get-undes($in, $key) {
    $des = New-Object System.Security.Cryptography.DESCryptoServiceProvider
    $des.Padding = [System.Security.Cryptography.PaddingMode]::Zeros

    $des.Key = [System.Text.Encoding]::ASCII.GetBytes($key)
    $des.IV  = [Byte[]](0,0,0,0,0,0,0,0)
    $params = ($in, 0, $in.Length)

    $decrypter = $des.CreateDecryptor()
    $db = [System.Security.Cryptography.ICryptoTransform].GetMethod("TransformFinalBlock").Invoke($decrypter , $params)
    $decrypter.Dispose()

    $ds = [System.Text.Encoding]::ASCII.GetString($db)
    $ds
}

$in="password"
$key="keyword1"
$des=get-des($in,$key)
$undes=get-undes($des,$key)
$in
$des
$undes

5.triple des

https://gist.github.com/k-rol/7e132e0fcd782a729ec6fdd8eacb68fa

$TDESKEY = 'fhEzg3Svho6nMYPcyCnEJc4qVRTkGY82'

##ENCODE

$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


##DECODE

$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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章