تحويل دونجل ASCII إلى سداسي عشري

يوم جيد للجميع.

حدث ذلك تاريخيًا أنه تم استيراد المفاتيح الإلكترونية لمؤسساتنا الصغيرة في برنامج إدارة المستندات الإلكترونية SBIS إلى سجل windows لكل محطة عمل ، لكل مستخدم.
عند إنشاء مكان عمل جديد ، تم تنزيل شجيرة بمفاتيح من فرع Crypto-Pro وتم استيرادها إلى مستخدم جديد.
على خادم طرفي ، أدركت أن هذا غير مقبول وقررت تحميل جميع المفاتيح إلى محرك أقراص USB محمول والسماح بمحركات خارجية في Crypto-Pro.

الآن عند إنشاء مستخدمين جدد على الخادم الطرفي ، لا حاجة لإيماءات باستخدام مفاتيح إلكترونية.

كانت المشكلة أنك بحاجة إلى تحويل مفاتيح ASCII من التسجيل إلى 16 ملفًا ثنائيًا.
ربما لا أعرف كيفية "google" ، لكنني لم أجد أي حلول جاهزة حول هذا الموضوع ، لذلك قمت بعمل نص خاص بي على باش.
ربما يأتي شخص في متناول اليدين.

وصف صغير.
المفاتيح موجودة في فرع التسجيل - [HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Crypto Pro \ Settings \ Users \ SID-user \ Keys \ Key-name]

هيكل المفتاح في فرع التسجيل غير
المحمل : "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 ...

كمعلمة ، يجب أن يحدد البرنامج النصي ملفًا بالمفاتيح التي تم تنزيلها من التسجيل (على سبيل المثال ، keys.reg).
نتيجة للبرنامج النصي ، سيتم إنشاء مجلد المفاتيح في الدليل الجذر الذي تم تشغيل البرنامج النصي منه وداخله المجلد باسم المفاتيح. ستحتوي المجلدات التي تحمل اسم المفاتيح على 6 ملفات لكل منها - 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/ar382285/


All Articles