我想知道在PHP中是否存在一种简单但安全的方法来加密字符串(而不是密码),密码没有存储在服务器上.
我已经检查了PHP的可逆密码加密例程,但是如果入侵者有权访问服务器和源代码,我不确定它是否足够安全.
我们谈论的是一个自动系统,其中计算机向服务器发送请求,该服务器将信息存储在日志中.所以我想我可以在请求标头中发送加密密码,最好加密,但是如果不在服务器上以某种方式存储密码就很难解密.等等,我想我可能会把事情搞得太复杂,但我希望你能得到这个想法......即使黑客完全控制了服务器,这也是为了保证信息的安全.
我希望有人可以解释一下过去几个小时让我烦恼的问题.
我试图解码一个用Ruby编码的字符串:
#!/usr/bin/env ruby
require 'base64'
require 'openssl'
require 'openssl/cipher'
require 'openssl/digest'
aes = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
aes.encrypt
aes.key = Digest::SHA256.digest('IHazSekretKey')
p Base64.encode64( aes.update('text to be encrypted') << aes.final )
Run Code Online (Sandbox Code Playgroud)
执行上述吐出:"3P86KyOrN2QJ/HFxxo3b7kAsxTgpDMMjROUPclsuXj0 = \n"
我现在尝试在NodeJS 0.6.17中解密此字符串
#!/usr/bin/env node
var crypto = require('crypto');
function decrypto(toDecryptStr) {
var result,
encoded = new Buffer(toDecryptStr, 'base64'),
decodeKey = crypto.createHash('sha256').update('IHazSekretKey', 'ascii').digest(),
decipher = crypto.createDecipher('aes-256-cbc', decodeKey);
result = decipher.update(encoded);
result += decipher.final();
return result;
};
console.log(decrypto('3P86KyOrN2QJ/HFxxo3b7kAsxTgpDMMjROUPclsuXj0='));
console.log(decrypto('3P86KyOrN2QJ/HFxxo3b7kAsxTgpDMMjROUPclsuXj0=\n')
Run Code Online (Sandbox Code Playgroud)
第二个脚本产生:
nazar@xfce:~/tmp/tst$ ./js_decrypt
Å'{ H£V)ÜB
Å'{ H£V)ÜB
Run Code Online (Sandbox Code Playgroud)
任何帮助都会非常感激,因为我现在唯一剩下的选择是将自己淹没在[Jamerson || Kirin Ichiban](我只是在开玩笑)
PS在 …