Bash脚本和Javascript的标准哈希算法
Standard hashing algorithm for Bash script and Javascript?
我的mac中有一个目录,其中有以下名称的文件-
Directory images -
1.jpg
2.jpg
3.jpg
4.jpg
我想写一个bash脚本,通过使用一些标准的哈希算法来重命名这个文件夹中的所有文件,这样目录现在看起来像这样-
假设散列密钥是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" />
但现在我需要对我生成的随机数再次使用标准加密算法,然后才能显示图像。(我一直强调"标准",因为相同的哈希算法必须在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脚本来使用哈希算法重命名所有文件,因此任何与此相关的代码都非常有用。非常感谢。
在javascript端使用openssl
重命名文件和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
作为您的算法。
在命令行上,您可以使用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');
如果你只是想做散列,那么你可以使用bcrypt
。bcrypt
是一个在bash中工作的实用程序,它也有node.js
模块。
尽管我接受了上面的答案,但我最终还是使用了node.js模块crypto进行哈希。此外,我不得不对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');
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- Steam Web API:I'我不知道该如何处理这个看起来像哈希的url来生成图像
- AngularJS:获取链接中没有哈希的查询字符串值
- 如何在Google chrome安全首选项文件中创建扩展安全哈希代码
- 如何在浏览器重新加载时保存位置哈希状态
- jQuery scrollTop-哈希错误
- 动态添加哈希标记;t工作
- 在Javascript中实现对哈希值的暴力攻击
- 如何在JavaScript/Node中计算SHA256哈希和Base64字符串编码
- 使用Javascript/jQuery以编程方式将当前锚点/哈希/片段附加到任何表单操作url
- 可以在React Native中制作一个自哈希应用程序
- 重定向不带哈希的URL-Ember.JS
- 正在测试主干事件哈希
- JavaScript对象作为哈希?复杂性是否大于O(1)
- 如何在JavaScript中实现哈希表
- 如何根据传入的哈希标签发送PHP请求
- 在我的图库(jQuery)中使用箭头导航时,更改URL中的哈希
- 哈希被推到猫鼬模型上作为'[对象对象]”;
- 哈希和数字
- Bash脚本和Javascript的标准哈希算法