Ubah dongle ASCII menjadi hex

Hari baik untuk semua

Kebetulan secara historis bahwa kunci elektronik dari organisasi holding kecil kami untuk program manajemen dokumen elektronik SBIS diimpor ke dalam jendela registri setiap workstation, setiap pengguna.
Saat membuat tempat kerja baru, semak dengan kunci diturunkan dari cabang Crypto-Pro dan diimpor ke pengguna baru.
Di server terminal, saya menyadari bahwa ini tidak dapat diterima dan memutuskan untuk mengunggah semua kunci ke USB flash drive dan mengizinkan drive eksternal di Crypto-Pro.

Sekarang saat membuat pengguna baru di server terminal, tidak diperlukan gerakan dengan kunci elektronik.

Masalahnya adalah Anda perlu mengonversi kunci ASCII dari registri ke 16 file biner.
Mungkin saya tidak tahu cara "google", tetapi saya tidak menemukan solusi yang sudah jadi tentang topik tersebut, jadi saya membuat skrip sendiri di bash.
Mungkin seseorang akan berguna.

Deskripsi kecil.
Kunci ada di cabang registri - [HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Crypto Pro \ Settings \ Users \ SID-user \ Keys \ Nama-

kunci ] Struktur kunci di cabang registri yang tidak
dimuat : "name.key" = hex: 10, d5 ...
" header.key "= hex: 20,42,19, ...
" primary.key "= hex:
30,12" masks.key "= hex: 30,23
" primary2.key "= hex: 30,12 ...
" masks2 .key ”= hex: 30,56,10 ...

Sebagai parameter, skrip harus menentukan file dengan kunci yang diunduh dari registri (misalnya, keys.reg).
Sebagai hasil dari skrip, folder kunci akan dibuat di direktori root tempat skrip diluncurkan dan di dalamnya folder dengan nama kunci. Folder dengan nama tombol masing-masing akan berisi 6 file - name.key, header.key, primary.key, primary2.key, masks.key, masks2.key.

#!/bin/bash

path=./
temp=$path/temp

file[1]="name.key"
file[2]="masks.key"
file[3]="masks2.key"
file[4]="primary.key"
file[5]="primary2.key"
file[6]="header.key"

if [ ! -d "$temp" ]; then 
    mkdir "$temp"
fi

if [ ! -d "$path/keys" ]; then 
    mkdir "$path/keys"
fi

# CR to LF.     UNIX (  LF,  CR)
dos2unix -n -q $1 $temp/$1

#       
cat $temp/$1 | grep -E -o 'Keys\\\w+]' | sed -E 's/Keys\\//; s/]//' > $temp/keysname

while read key
   do
     #          
     cat $temp/$1 | sed -e '/./{H;$!d;}' -e "x;/$key]/!d" | sed -n "/$key]/!p" > $temp/$key
	
	#   (name, primary, masks, header...)           
	if ! [ -d "$path/keys/$key" ]; then
              mkdir "$path/keys/$key"
	fi

	for i in {1..6}; 
   	 do 
   	 hex=$(cat $temp/$key | tr -d '\n' | sed -E 's/\\//g; s/ //g; s/\$//g' | grep -E -o "${file[$i]}\"=hex:(\w{2},?)+?" | sed -E "s/${file[$i]}\"=hex://; s/,//g" | sed -E 's/\w{2}/\\x&/g')
   	 echo -e -n "$hex" > "$path/keys/$key/${file[$i]}"

	 # LF to CR ??? 
	 # sed 's/$'"/`echo \\\r`/" "$path/keys/${file[$i]}" > "$path/keys/${file[$i]}"
	done
done < $temp/keysname

#   
if [ -d "$temp" ]; then 
   rm -rf "$temp"
fi

exit 0

Source: https://habr.com/ru/post/id382285/


All Articles