Decode Base64 to String using Cryptography in SNOW
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-07-2018 11:32 AM
Hello
We are on Jakarta version. I have a need to convert native Powershell script to SNOW script. (code snippet below)
I need to create signature and headers as below using Cryptography and then pass it to URL with JSON body.
All other variables are passes into the script. I need to generate Signature and Headers.
It works fine with Powershell command. Is there a way to use the same code in SNOW script?
If yes, please advise how do I achieve that?
Thanks,

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-07-2018 11:39 AM
I'm not too familiar with powershell, but you should be able to do a gs.base64Decode(encodedStr).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-08-2018 05:39 PM
Thanks Brad for your response.
Yes I can use that function but I believe it wouldn't incorporate same level of security as being used in Powershell script (Cryptography and SHA256)
But I appreciate your response and time to help me out.
Thanks,
Rajan Mehta

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-07-2018 06:56 PM
Yes you can run this script using Orchestration Custom PowerShell Activity.
1> Make sure plugin Orchestration is activated
2> Navigate to Orchestration > MID Server Script Files > click on New > copy and paste the script in "script" box, and make sure the name of the script file ends with .ps1. Also leave other options empty / unchecked
3> Create a custom PowerShell activity to run this script file
https://docs.servicenow.com/bundle/london-servicenow-platform/page/administer/orchestration-activity-designer/task/create-custom-activities.html
=== Example ===
I tried below on my lab instance:
$accesskey = "asdfasdfasdf"
$StorageAccount = "jkljkljkl"
$resource = "vm"
$GMTTime = (get-date).ToUniversalTime().toString('R')
$stringToSign = "$GMTTime`n/$StorageAccount/$resource"
$hmacsha = new-object system.security.cryptography.HMACSHA256
$hmacsha.key = [convert]::FromBase64String($accesskey)
$signature = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($stringToSign))
$Signature = [Convert]::ToBase64String($signature)
$headers = @{
'x-ms-date' = $GMTTime
'x-ms-version' = "2018-03-28"
'Authorization' = "SharedKeyLite " + $storageAccount + ":" + $signature
'Accept' = "application/json;odata=fullmetadata"
}
$headers
=== Output ===
Name Value
---- -----
x-ms-version 2018-03-28
x-ms-date Wed, 08 Aug 2018 01:56:15 GMT
Authorization SharedKeyLite jkljkljkl:QvwYYY9Is/cEKWGhpiwAf...
Accept application/json;odata=fullmetadata
Please Mark as answered, or let me know if you need more information.
Thanks,
T

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-07-2018 06:58 PM
Please mark as answer if this helps, or let me know if you need more information.
Thanks,
T