-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathencrypt_and_archive.ps1
55 lines (42 loc) · 2.24 KB
/
encrypt_and_archive.ps1
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
param(
[Parameter(Mandatory = $true)]
[string]$InputFile,
[Parameter(Mandatory = $true)]
[string]$PublicKey
)
# Витягуємо ім'я файлу без шляху
$BaseName = [System.IO.Path]::GetFileNameWithoutExtension($InputFile)
$ArchiveName = "$BaseName.tar.gz"
$PartSize = 245
# Створюємо тимчасову папку
$TempDir = "temp_parts"
New-Item -ItemType Directory -Force -Path $TempDir | Out-Null
# Крок 1: Архівування файлу з іменем архіву, що відповідає імені файлу
Write-Output "Архівування файлу $InputFile у $ArchiveName..."
& tar -czf $ArchiveName $InputFile
# Крок 2: Розбиваємо архів на частини по $PartSize байтів
Write-Output "Розбиваємо архів на частини по $PartSize байтів..."
$fs = [System.IO.File]::OpenRead($ArchiveName)
$buffer = New-Object byte[] $PartSize
$index = 0
while (($bytesRead = $fs.Read($buffer, 0, $PartSize)) -gt 0) {
$partFile = Join-Path $TempDir ("part_$index")
[System.IO.File]::WriteAllBytes($partFile, $buffer[0..($bytesRead-1)])
$index++
}
$fs.Close()
# Крок 3: Шифруємо кожну частину публічним ключем
Write-Output "Шифрування частин..."
foreach ($part in Get-ChildItem -Path $TempDir -Filter "part_*") {
$encryptedPart = "$($part.FullName).enc"
& openssl rsautl -encrypt -inkey $PublicKey -pubin -in $part.FullName -out $encryptedPart
Remove-Item $part.FullName # Видаляємо нешифровану частину після шифрування
}
# Крок 4: Архівуємо всі зашифровані частини в один архів формату .tar.gz
Write-Output "Створення фінального архіву з зашифрованими частинами..."
& tar -czf "${BaseName}_encrypted_parts.tar.gz" -C $TempDir .
# Крок 5: Очищення тимчасових файлів
Write-Output "Очищення тимчасових файлів..."
Remove-Item -Recurse -Force $TempDir
Remove-Item $ArchiveName
Write-Output "Шифрування завершено. Фінальний архів: ${BaseName}_encrypted_parts.tar.gz"