BASE64からSIDに変換できたので、逆にBASE64にするにはどうすれば?ということで作ってみました。
単純に - で区切って、16進数変換して、リトルエンディアン並びにして、バイナリにしてbase64を行うだけ、と。
2バイト目の「0x05」がどこからきているのやら?と思っていたのですが、
https://learn.microsoft.com/ja-jp/windows/win32/api/winnt/ns-winnt-sid
と
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc962011(v=technet.10)
に、Subauthority Count(後続のデータ個数ですね)だと書いてありました。
3~8バイト目はIdentifierAuthorityで、
https://learn.microsoft.com/ja-jp/windows/win32/api/winnt/ns-winnt-sid_identifier_authority
配列で6バイト・・。末尾にデータがあるほかにパターンがあるのだろうけど、、。
よくわからないから、ビッグエンディアンの6バイト値だとしておこう(適当すぎる)。
#/bin/bash
SID=S-1-5-21-312109860-4223824132-3422679046-1103
IFS='-' read -ra ADDR <<< "${SID}"
COUNT=`printf '%02X' $((${#ADDR[@]}-3))`
BESA0=`printf '%02X' ${ADDR[1]}`
BESA1=`printf '%012X' ${ADDR[2]}`
BESA2=`printf '%08X' ${ADDR[3]}`
BESA3=`printf '%08X' ${ADDR[4]}`
BESA4=`printf '%08X' ${ADDR[5]}`
BESA5=`printf '%08X' ${ADDR[6]}`
BERID=`printf '%08X' ${ADDR[7]}`
#echo ${BESA0}-${BESA1}-${BESA2}-${BESA3}-${BESA4}-${BESA5}-${BERID}
LESA0="\x${BESA0}\x${COUNT}"
LESA1="\x${BESA1:0:2}\x${BESA1:2:2}\x${BESA1:4:2}\x${BESA1:6:2}\x${BESA1:8:2}\x$
{BESA1:10:2}"
LESA2="\x${BESA2:6:2}\x${BESA2:4:2}\x${BESA2:2:2}\x${BESA2:0:2}"
LESA3="\x${BESA3:6:2}\x${BESA3:4:2}\x${BESA3:2:2}\x${BESA3:0:2}"
LESA4="\x${BESA4:6:2}\x${BESA4:4:2}\x${BESA4:2:2}\x${BESA4:0:2}"
LESA5="\x${BESA5:6:2}\x${BESA5:4:2}\x${BESA5:2:2}\x${BESA5:0:2}"
LERID="\x${BERID:6:2}\x${BERID:4:2}\x${BERID:2:2}\x${BERID:0:2}"
#echo ${LESA0}-${LESA1}-${LESA2}-${LESA3}-${LESA4}-${LESA5}-${LERID}
printf '%b' "${LESA0}${LESA1}${LESA2}${LESA3}${LESA4}${LESA5}${LERID}" | base64
単純に - で区切って、16進数変換して、リトルエンディアン並びにして、バイナリにしてbase64を行うだけ、と。
2バイト目の「0x05」がどこからきているのやら?と思っていたのですが、
https://learn.microsoft.com/ja-jp/windows/win32/api/winnt/ns-winnt-sid
と
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc962011(v=technet.10)
に、Subauthority Count(後続のデータ個数ですね)だと書いてありました。
3~8バイト目はIdentifierAuthorityで、
https://learn.microsoft.com/ja-jp/windows/win32/api/winnt/ns-winnt-sid_identifier_authority
配列で6バイト・・。末尾にデータがあるほかにパターンがあるのだろうけど、、。
よくわからないから、ビッグエンディアンの6バイト値だとしておこう(適当すぎる)。
#/bin/bash
SID=S-1-5-21-312109860-4223824132-3422679046-1103
IFS='-' read -ra ADDR <<< "${SID}"
COUNT=`printf '%02X' $((${#ADDR[@]}-3))`
BESA0=`printf '%02X' ${ADDR[1]}`
BESA1=`printf '%012X' ${ADDR[2]}`
BESA2=`printf '%08X' ${ADDR[3]}`
BESA3=`printf '%08X' ${ADDR[4]}`
BESA4=`printf '%08X' ${ADDR[5]}`
BESA5=`printf '%08X' ${ADDR[6]}`
BERID=`printf '%08X' ${ADDR[7]}`
#echo ${BESA0}-${BESA1}-${BESA2}-${BESA3}-${BESA4}-${BESA5}-${BERID}
LESA0="\x${BESA0}\x${COUNT}"
LESA1="\x${BESA1:0:2}\x${BESA1:2:2}\x${BESA1:4:2}\x${BESA1:6:2}\x${BESA1:8:2}\x$
{BESA1:10:2}"
LESA2="\x${BESA2:6:2}\x${BESA2:4:2}\x${BESA2:2:2}\x${BESA2:0:2}"
LESA3="\x${BESA3:6:2}\x${BESA3:4:2}\x${BESA3:2:2}\x${BESA3:0:2}"
LESA4="\x${BESA4:6:2}\x${BESA4:4:2}\x${BESA4:2:2}\x${BESA4:0:2}"
LESA5="\x${BESA5:6:2}\x${BESA5:4:2}\x${BESA5:2:2}\x${BESA5:0:2}"
LERID="\x${BERID:6:2}\x${BERID:4:2}\x${BERID:2:2}\x${BERID:0:2}"
#echo ${LESA0}-${LESA1}-${LESA2}-${LESA3}-${LESA4}-${LESA5}-${LERID}
printf '%b' "${LESA0}${LESA1}${LESA2}${LESA3}${LESA4}${LESA5}${LERID}" | base64
コメント
コメントを投稿