1

私のMacには、次の名前のファイルを持つディレクトリがあります-

Directory images -
1.jpg
2.jpg
3.jpg
4.jpg

ディレクトリが次のようになるように、標準のハッシュアルゴリズムを使用して、このフォルダー内のすべてのファイルの名前を変更するbashスクリプトを作成したいと思います-

ハッシュキーが common_key = "mykey123" であると仮定しましょう

Directory images -
U2FsdGVk.jpg
X1O9Z6e.jpg
ECdjybF.jpg
U2FsdGVajpg

どうすればこれを達成できますか?

さらに、Nodejs (基本的には JavaScript) でいくつかのコードを書いています。ここで、これら 4 つからランダムな画像を選択して表示したいので、使用しています-

var random_image_number = Math.floor((Math.random()*4)+1); // Picking a random number out of 4

random_image が 3 であると仮定します。ここで、画像番号 3 を表示する必要があります。画像名をハッシュしていない場合、通常はこれを行います -

<img src="/images/" + random_image_number + ".jpg" />

しかし、画像を表示する前に、生成した乱数に対して標準の暗号化アルゴリズムを再度使用する必要があります。(同じハッシュアルゴリズムがJS側とbashスクリプトで機能し、同じ結果を生成する必要があるため、「標準」を強調し続けます)

だから私はこのようなものが必要です

var random_image_number = Math.floor((Math.random()*4)+1); // Picking a random number out of 4
var random_image_number_hashed = some_hashing_function(common_key, random_image_number)
<img src="/images/" + random_image_number_hashed + ".jpg" />

使えるアルゴリズムを教えてください。それほど洗練されている必要はありませんが、bash スクリプトと javascript 側で同じ結果が得られる必要があります。

また、ハッシュアルゴリズムを使用してすべてのファイルの名前を変更するためのbashスクリプトを作成する方法がわからないため、それに関するコードは非常に役立ちます。ありがとうございました。

4

3 に答える 3

1

opensslJavaScript側でファイルとcrypto.jsの名前を変更するために使用すると、SHA1を使用してファイル名をハッシュできるはずです。

次の bash ループは、名前の変更を行います。ファイル名にスペース文字が含まれていないことを前提としていることに注意してください。

for file in `/bin/ls *.jpg`; do
    hashedFileName=`echo -n ${file%.*} | openssl dgst -sha1 -hmac "myKey123"`;
    mv $file $hashedFileName.jpg;
done

Javascript 側は、各イメージ名に対して次のようになります。

// hash filename "1.jpg":
var hashedFileName = CryptoJS.HmacSHA1("1", "myKey123") + ".jpg";
于 2012-07-18T20:18:54.703 に答える
0

私は上記の回答を受け入れましたが、最終的にはハッシュに crypto と呼ばれる node.js モジュールを使用することになりました。また、機能させるために bash スクリプトを少し調整する必要がありました。

これが私が最終的に使用したものです-

Bash スクリプト (画像フォルダーで実行) -

for file in `/bin/ls *.jpg`; do
    hashedFileName=`echo -n ${file%.*} | openssl dgst -sha1 -hmac "myKey123"`;
    mv $file ${hashedFileName##* }.jpg;
done

NodeJ -

var crypto = require('crypto');
...
random_image_number_hashed = crypto.createHmac('sha1', 'myKey123').update(random_image_number).digest('hex');
于 2012-07-18T22:14:01.227 に答える
0

aes256おそらく、これをアルゴリズムとして見たいと思うでしょう。

コマンドラインでは、opensslユーティリティを使用してファイル名を暗号化できます。

echo 'filename_to_encrypt' | openssl aes-256-cbc -a

そして、モジュールを使用して復号化nodeできます。crypto

var crypto = require('crypto');

var algorithm = 'aes256'; // or any other algorithm supported by OpenSSL
var key = 'password';
var text = 'encrypted_filename';

var decipher = crypto.createDecipher(algorithm, key);
var decrypted = decipher.update(text, 'hex', 'utf8') + decipher.final('utf8');

ハッシュを行いたいだけの場合は、を使用できますbcryptbcryptは bash で動作するユーティリティであり、そのnode.jsためのモジュールもあります。

于 2012-07-18T20:06:11.427 に答える