Bash脚本和Javascript的标准哈希algorithm?

我有一个目录在我的Mac中有以下名称的文件 –

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

我想写一个bash脚本来重命名这个文件夹中的所有文件,通过使用一些标准的散列algorithm,以便目录看起来像这样 –

让我们假设散列键是common_key =“mykey123”

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

我怎样才能做到这一点?

Furthur,我正在写Nodejs(基本上是JavaScript)的一些代码,我希望从这四个中挑选一个随机图像并显示它,所以我正在使用 –

 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" /> 

但是现在我需要在生成的随机数上再次使用标准的encryptionalgorithm,然后才能显示图像。 (我一直强调“标准”,因为相同的哈希algorithm必须在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" /> 

请告诉我可以使用什么algorithm。 它不需要太复杂,但必须在bash脚本以及JavaScript方面给出相同的结果。

此外,我不知道如何编写的bash脚本重命名所有的文件使用散列algorithm,所以任何代码将是非常有用的。 谢谢。

使用openssl来重命名JavaScript端的文件和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"; 

你可能会想看看aes256作为你的algorithm。

在命令行中,您可以使用openssl实用工具来encryption您的文件名:

 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模块。

虽然我接受了上面的答案,但最终我最终还是使用了被称为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 

NodeJs –

 var crypto = require('crypto'); ... random_image_number_hashed = crypto.createHmac('sha1', 'myKey123').update(random_image_number).digest('hex');