祝大家有美好的一天。历史上曾经发生过,我们小规模组织的电子文档管理程序SBIS的组织的电子密钥被导入到每个工作站,每个用户的Windows注册表中。创建新工作场所时,从Crypto-Pro分支中卸载了带钥匙的灌木丛,并将其导入新用户。在终端服务器上,我意识到这是不可接受的,因此决定将所有密钥上传到USB闪存驱动器,并允许在Crypto-Pro中使用外部驱动器。现在,在终端服务器上创建新用户时,无需使用电子键进行手势。问题是您需要将ASCII密钥从注册表转换为16个二进制文件。也许我不知道如何“谷歌”,但是我没有找到关于该主题的现成解决方案,因此我在bash上编写了自己的脚本。也许有人会派上用场。一个简短的描述。密钥在注册表分支中-[HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Crypto Pro \ Settings \ Users \ SID-user \ Keys \ Key-name]卸载的注册表分支中的密钥结构:“ name.key” =十六进制:10,d5 ...“ header.key“ =十六进制:20,42,19,...” primary.key“ =十六进制:30,12” masks.key“ =十六进制:30,23” primary2.key“ =十六进制:30,12 ...” masks2 .key” = hex:30,56,10 ...作为参数,脚本必须指定一个文件,该文件包含从注册表中下载的密钥(例如keys.reg)。作为脚本的结果,将在启动脚本的根目录中创建keys文件夹,并在其中创建带有密钥名称的文件夹。带有密钥名称的文件夹每个将包含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
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
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]}"
done
done < $temp/keysname
if [ -d "$temp" ]; then
rm -rf "$temp"
fi
exit 0