2017-03-23 17 views
0

私は、RESTプラットフォームから読み込まれているファイルのリストにsha1ハッシュをbase64エンコードしようとしています。ファイルの読み込みがうまくいき、実際にはスクリプト全体がうまく動作しますが、問題は、Base64でSHA1ハッシュの文字列表現をエンコードするしか方法がありませんが、B64では実際のハッシュをエンコードする必要があるということですハッシュの文字列PowershellのBase64エンコーディング

以下は私が使用しているコードの一部ですが、もう一度B64はハッシュの文字列をエンコードしたくはありませんが、ハッシュ自体はエンコードしています。

例として、私がファイルに対して持っているコードの出力は以下の通りです。最初はB64が生のハッシュをエンコードし、もう一つが私たちのコードによって作成されたハッシュです。まったく違うハッシュの文字列値。

ご協力いただければ幸いです。

ソースファイル: /休憩/ CCLAIMS/053/17667053 AERTRMT1xZNrW9TTl6k6Orryiwc12gtJQfJSnlOeWGI =

対象ファイルのハッシュ /休憩/ CCLAIMS/053/17667053 M0U1NDY0NDk1NEJDNjVBRTNEMEU3M0JBNTkyNzk4QzMwQ0M3MEU2NAの==

Function Get-StringHash([String] $String,$HashName = "MD5") { 
    $StringBuilder = New-Object System.Text.StringBuilder 
    [System.Security.Cryptography.HashAlgorithm]::Create($HashName).ComputeHash(
     [System.Text.Encoding]::UTF8.GetBytes($String) 
    )|%{ 
     [Void]$StringBuilder.Append($_.ToString("x2")) 
    } 
    $StringBuilder.ToString() 
} 

$hash = "SHA1" 

$filehash = Get-FileHash -Path C:\Temp\PS\output.file -Algorithm $hash 
$hashvalue = [system.text.encoding]::UTF8.GetBytes($filehash.Hash) 
    add-content $outputfile ($line + "," + $filehash.Hash + "," + [system.convert]::ToBase64String($hashvalue)) 
} Catch { 
    $errormessage = $_.Exception.Message 
    add-content $outputerrorfile ($line + "," + "Error "+$errormessage) 
}  

答えて

0

あなたのコードについての何かあなたの元の意図がそこにあったかどうかは完全にはわかりません。とにかく、ここで(テンプレートとしてhttps://cyber-defense.sans.org/blog/2010/02/11/powershell-byte-array-hex-convertを使用して)16進数文字列からバイト配列に変換ナイーブです:

function Naive-Convert-HashToByteArray { 
    [CmdletBinding()] 
    Param ([Parameter(Mandatory = $True, ValueFromPipeline = $True)] [String] $String) 
    $String -split '([A-F0-9]{2})' | foreach-object { if ($_) {[System.Convert]::ToByte($_,16)}} 
} 

その後、

$filehash = Get-FileHash -Path C:\Temp\PS\output.file -Algorithm $hash 
$filehash_as_bytes = Naive-Convert-HashToByteArray($filehash.Hash) 
[System.Convert]::ToBase64String($filehash_as_bytes) 

あなたが探している結果のエンコーディングを生成する必要があります。それをあなたが望むものに連結してそこからファイルに書き込むことができるはずです。

(「Naive」という名前は、入力文字列が1文字より長く、そのオブジェクトの.Hash属性が特定の形式であると仮定していることを意味します)

関連する問題