2017-03-23 2 views
0

REST 플랫폼에서 읽는 파일 목록에 sha1 해시를 base64로 인코딩하려고합니다. 파일의 다시 읽을 잘 작동하고 사실 전체 스크립트가 제대로 작동하지만 문제는 내가 어떻게 만 Base64 인코딩 SHA1 해시의 문자열 표현을 인코딩 할 수 있습니다,하지만 B64 실제 해시를 인코딩해야합니다. 해시의 캐릭터 라인Powershell의 Base64 인코딩

아래 코드는 내가 사용하고 있지만 다시 B64가 해시 문자열을 암호화하지만 해시 자체를 원하지 않습니다.

예를 들어, 파일에 대한 코드의 출력은 다음과 같습니다. 첫 번째 해시는 B64가 원시 해시를 인코딩하고 다른 해시는 Google 코드로 생성 된 해시입니다. 완전히 다른 해쉬의 문자열 값.

도움을 주시면 감사하겠습니다.

소스 파일 : 코드에 대한 /휴식/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"라는 이름은 들어오는 문자열이 단일 문자보다 길고 적절한 형식 인 .hash 특성이 해당 개체에서 나온 것으로 가정한다는 것을 의미합니다.)