-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConvertFrom-EncryptedData.ps1
More file actions
77 lines (73 loc) · 5.14 KB
/
ConvertFrom-EncryptedData.ps1
File metadata and controls
77 lines (73 loc) · 5.14 KB
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Function ConvertFrom-EncryptedData {
<#
.SYNOPSIS
Converts an encrypted string to plain text string to suitable for storage using a key
.DESCRIPTION
The script takes a key in the form of a byte array (can be created using the New-EncryptionKey function),
and a encrypted text string, and creates a [SecureString], and then uses the
ConvertTo-SecureString to output the encrypted string
.PARAMETER Key
This is the byte array to be used as a key for the encryption.
.PARAMETER KeyString
This is the plain text encryption key. If this parameter is used, then the New-EncryptionKey function is called
to convert this into a byte array
.PARAMETER PlainText
This is the string data to be encrypted.
.EXAMPLE
PS C:\> $utf8key = 'This key contains UTF8 £'
PS C:\> $EncryptionKey = New-EncryptionKey -KeyString $utf8key
PS C:\> $UnEncryptedText = 'This is unencrypted text. It also contains UTF8 characters like £ and ¢'
PS C:\> $EncryptedText = ConvertTo-EncryptedData -key $EncryptionKey -PlainText $UnEncryptedText
PS C:\> $EncryptedText
76492d1116743f0423413b16050a5345MgB8AEUAKwBJADEAbQBHAGEAYgBrAC8AQwBLADYAMgBXAHYAUwAwADkAawB3AFEAPQA9AHwAOABlAGQAOQBkADgAZQA5AD
EAZQA5ADMAYwBjAGUAMABhAGEAMQA4ADcAMQAxADEAYQBiADEAYwA3ADMAMABhADIANgA2ADUAZAA0ADQANAA3ADUAYwBjADkAMgAyADgAOQA0ADYAZAA3ADcAMgA0
AGQANwBkAGMAZABkADEAYgAwADQANQBjAGYANgA1ADgAMQA4ADQANQBiAGYAMwBkAGMANQA1ADUAMwA5ADMAOABiAGQAZgA3AGQAZQA4ADEAYQAxAGUAOABlAGEAMA
BiADUAYwBiADUAZgA5ADIAZQAyADgANwA3AGUAMwA2ADEAZgA3ADYAMAA2AGUAYwA2ADEANgA4ADUAYwAxAGEANwA5ADcAOQAzAGEAYwA1ADMAZQBlAGIAYwA4ADMA
OQA4ADgAYQA4ADAAMwA1ADQAOABhAGUAZQBjAGUAMQBhADAAMQAxADcANwA5AGUAYwAyADAAMgBmAGUAYgBmADgAOABlAGIAZgBkADUAMgAzADIAZQA4ADkAMAA5AD
IAZQA5AGUAYQAzADcAOABiADgAMgAxADMAYQA4ADAAOAA1AGEAMQA3ADIAYgAzADgAOAA2AGYANABjADYANAA5AGUANgBlADkAYQA4ADAAMAA3AGIAYgA0ADIANABm
ADMANQAyADQAMgA4ADgAYgA5AGIAYgBkADkAMAAwAGEAOQA5AGIAMABhADkAYwBjAGEAMwBlAGEAOAA3ADQANAA2ADQAYwA2AGEAMwAwADUAMQBlADYAMQAyADIAOA
AwAGIAYgBlAGQAZgAzAGUAYgAyAGIANgAxADIAMQA1ADIAYwBmAGIAYgAwAGIAMAA5ADgANwA4AA==
PS C:\> $EncryptedText2 = ConvertTo-EncryptedData -KeyString $utf8key -PlainText $UnEncryptedText
PS C:\> $EncryptedText2
76492d1116743f0423413b16050a5345MgB8AHAAQwBrAFEASABVAFYAUgBHAGEASABGAHIAcQBnAHAASQBnAHgAUQBOAFEAPQA9AHwANgAxAGEANgBjADcANQA5AD
kAOQBhADEAZAAwADAAMwAyADUAOAA1AGIANAA1AGQAMQBiAGYAMwA4ADYANwA5AGQAYwA0ADIAMQAwADcAYgA2AGMAYwA1AGIAMwAwAGQANABmAGQAZQAxAGMAZQAy
ADMANwA5AGYAMgA2ADUAYQBmADEAMQAxADEAMAAxADAAYwAwADQANQA3ADcAYQAxADMAZgBiADUAMgBkAGQAYgBhADgANAA1ADkANAA1ADcAOQBjADEAOAAwAGEAYQ
AyADEAZABjAGIAOQBjAGMANAA3ADkAMQBkAGUANQBiAGEAMwA1ADEAZABkADYAYgAzADAAOQAzADYAZQAwADEAOQA0ADQAMAA2ADQAYgBiAGQANAA3AGQAOQA2ADMA
OABlADEAZgBkAGIAMAAzAGYANQA5ADgANABkADkAMQA1ADgANwA1AGYANQA0AGEAOABiADgAZQAzAGMAYwA1AGIAZgBmAGMAOQBhAGIAMgAzADMANgAyAGUANgAyAG
EAZgA5ADQAYwAwAGEAOAAwAGEAMwBiAGUANABhADMAMgA2AGEAZABiAGYAYQA5AGUAYwA4AGYAYQAwAGUAYgA2AGIANgAyAGEAOAA5ADMANQBkAGEAOABiAGYAYQBj
AGMAYQA2ADEAMwBmAGMANQAwAGIAMABkAGMAZQAwADYANAA3ADYAZQA3ADcAMQBkADMAMQBmADEAYgBjADgAMgBhAGMAYgBmADYAZgAyADAAMAA3ADIAMAAyAGIAMg
AxADAAYwAyADQAZgBkADIAZgBmADkANgAwAGUANQBiADAANgAwADgAOAA4AGEAYwA5ADgAYwAzAA==
PS C:\> ConvertFrom-EncryptedData -key $EncryptionKey -EncryptedData $EncryptedText
This is unencrypted text. It also contains UTF8 characters like £ and ¢
PS C:\> ConvertFrom-EncryptedData -KeyString $utf8key -EncryptedData $EncryptedText
This is unencrypted text. It also contains UTF8 characters like £ and ¢
PS C:\> ConvertFrom-EncryptedData -KeyString $utf8key -EncryptedData $EncryptedText2
This is unencrypted text. It also contains UTF8 characters like £ and ¢
PS C:\> ConvertFrom-EncryptedData -key $EncryptionKey -EncryptedData $EncryptedText2
This is unencrypted text. It also contains UTF8 characters like £ and ¢
.INPUTS
[system.array] (bytes)
[system.string]
.OUTPUTS
[system.string]
.NOTES
This is based on this article:
http://get-powershell.com/post/2008/12/13/Encrypting-and-Decrypting-Strings-with-a-Key-in-PowerShell.aspx
#>
[cmdletbinding(DefaultParameterSetName = 'byKey')]
param(
[parameter(Mandatory, ValueFromPipelineByPropertyName, HelpMessage = 'The byte array used to encrypt the data', ParameterSetName = 'byKey')]
[array]$key,
[parameter(Mandatory, ValueFromPipelineByPropertyName, HelpMessage = 'The plain text key to use for encrypting the string', ParameterSetName = 'byString')]
[string]$KeyString,
[parameter(Mandatory, ValueFromPipelineByPropertyName, HelpMessage = 'The encoded data to decrypt')]
[string]$EncryptedData
)
if ($PSCmdlet.ParameterSetName -eq 'byString') {
$key = New-EncryptionKey -KeyString $KeyString
}
ConvertTo-SecureString -String $EncryptedData -Key $key |
ForEach-Object {
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($_))
}
}