我通过登录来提取一些HTML。无论如何我的密码没有在代码中以纯文本形式输入?我可以使用一些混淆技术吗?
理想情况下,我想要一个包含我的密码的文件,该文件与我想要共享的源代码分开。加载\ docs \ mypass.txt中保存的密码的东西会很好用。然后我可以修改它来对我的真实密码进行简单的解读,这样我就可以在mypass.txt中保留一个混乱的版本
必须有一些简单的方法在<<mysecretepassword>>
上进行查找和替换,并从文本文件中获取。
<% register.ZServLogin.grabItems("ClimbElCap", "<<mysecretpassword>>").each do |item| %>
答案 0 :(得分:2)
在我看来,不要大量使用,你应该从不将密码作为纯文本存储在任何文件中。虽然您可以对密码进行模糊处理,但在有锁的情况下,始终存在密钥,密钥可以复制。我想说的是密码可以解密。相反,尝试将您的密码存储为哈希!我会使用名为Digest
的模块ruby,但是ruby确实有一些内置的哈希方法。 (但我会让你探索那个区域)
示例时间!让我们假设您希望用户提供密码,并且您希望将该密码存储在文本文件中以供日后使用。您还希望能够验证用户输入的密码是否正确。让我们开始:
#first you need to require the module
require 'digest'
#then you need to get the password from the user
input = gets.chomp
#now the magic begins, using the digest module we are going to turn the password into a has
password = Digest::SHA1.hexdigest(input)
#and you can store it where ever and how ever you would like. ( If you are worried about corrupting your file you may want to look into PStore. A great class for persistence )
write = File.open("password.txt",'w') do |file|
file.write(password)
end
#Lets say the program ends there but now we want to have the user login
puts "Login!"
print "Username: "
user = gets.chomp
print "Password: "
pass = gets.chomp
#Now in order for him to login we need to compare his password with the one stored in the file
read = File.read("password.txt")
pass = Digest::SHA1.hexdigest(pass)
puts pass == read ? "Passwords match : "Please try again"
显然,在你的情况下需要做很多工作。但我只是想给你一些你可能想要或不想考虑的选择。谢谢,
快乐的编码!
答案 1 :(得分:1)
我认为这是一个完美的例子,您希望使用Rails 4.1中引入的config/secrets.yml
(参见:http://edgeguides.rubyonrails.org/4_1_release_notes.html#config-secrets-yml)。或类似费加罗的宝石(见:https://github.com/laserlemon/figaro)。
简而言之:将密钥添加到config/secrets.yml
:
development:
foo_api_key: 'a-dummy-development-key'
production:
foo_api_key: 'super-secret-production-key'
您不应将此文件添加到版本控制系统,除非您从ENV
加载生产密钥,如下所示:
production:
foo_api_key: <%= ENV['super-secret-production-key'] %>
在您的代码中,您可以使用以下键:
...grabItems("ClimbElCap", Rails.application.secrets.foo_api_key)