シェル変数とバイナリファイルのXOR

シェル変数とバイナリファイルのXOR

シェル変数(コマンドライン入力から読み取る)にパスワードが保存されています。

また、ファイルにキーファイルが保存されています(使用してdd作成されます/dev/urandom)。

私のハードドライブの復号化にはこれら2つが必要だと思うので、2つをXORしてファイルに保存してキーとして使用したいと思います。

だから、最も簡単な方法が何であるかを知りたいです。

xxd許可されている場合、これは完璧な選択ですが、-b同時に-p明らかにそうではありません...


編集:私はこれを使うでしょうhttps://github.com/xavierm02/combine-keys

ベストアンサー1

シェルはビット操作を処理できますが、深刻な処理の場合は次のようになります。非常に速度が遅く、一度に約20個の数字しか処理できません。まだ:

sh <<\CMD 
    printf 'printf "%%b" "\\0$((%04o^04))"'  "'a" |\
    . /dev/stdin
CMD

#OUTPUT
A

私はbc過去にバイナリバイトを傷つけたので、あなたの質問についてインターネット検索をしました。

GNU bcの排他的OR(XOR)

インターネットでこの問題に対する解決策を見つけた場合は、おそらくbcに対応するC言語を探しているでしょう^

不快な真実:そんなことはありませんbc。上向きbc矢印演算子は整数指数化に使用されます。つまり、2^xx の 2 番目のビット反転ではなく、2 の累乗を返します。 AND、OR、およびよりエキゾチックな親戚のためのXORおよびビット演算子に対応するものを探している場合は、このサイトのlogic.bcとこれらの操作を実行する関数を含む親戚を確認してください。

XOR&&ロジックandなどのifステートメントにロジックを入れたい場合は、条件を角括弧で囲んで使用してみ||てください。!=たとえば、

c=0;if((a==1)!=(b==2)){c=3}

a が 1 または b が 2 の場合、c は 3 に設定されますが、a が 1 で b がすべて 2 の場合はそうではありません。

(昔はlogic.bc xor()関数の中に秘密がありましたが、より速いアルゴリズムに置き換えられました。)

上記はbcFAQから抜粋したものです。logic.bc上記の機能には、探しているbitwiseロジックが含まれています。見つけることができるここ。説明:

各種機能セットの実行ビットごとAND、OR、NOT、XORなどの関数です。この操作をまったくサポートしていないこのファイルの以前のバージョンとは異なり、負の数は2の補数を使用して表示されます。ここにあるいくつかの機能は、グローバルビット幅変数(それ自体がこのファイルの一部として初期化されます)を使用して、ほとんどのコンピュータで見つかったバイト/ワードサイズをエミュレートします。この変数が 0 に設定されている場合、ビット幅は無限大と見なされます。数値の補助浮動小数点表現が生成されたと思われる場合は、多くの関数が警告を表示します。たとえば、次のようになります。

1.1111... is an SFPR of10.0000...;

これらの警告は、グローバル変数を(デフォルトは1)sfpr_warnに設定することで無効にできます。0

  • 固定フォントサイズ
  • 言葉の長さ無制限
  • 共通ビット別
  • 2の報酬
  • ビットシフト
  • グレーコード
  • 「乗算」
  • 浮動小数点
  • 浮動小数点「乗算」
  • グレーコード+浮動小数点

おすすめ記事