人偶自定义函数中的 md5 哈希
md5 Hash in a puppet custom function
目前我想从一个参数创建一个 md5 散列。然后我想把散列写入一个文件(路径是另一个参数)。
即自定义函数:
module Puppet::Parser::Functions
newfunction(:write_line_to_file) do |args|
require 'md5'
filename = args[0]
str = MD5.new(lookupvar(args[1])).to_s
File.open(filename, 'a') {|fd| fd.puts str }
end
end
以及 puppet 清单中的调用:
write_line_to_file('/tmp/some_hash', "Hello world!")
我得到的结果是一个文件,内容不是散列而是原始字符串。 (在示例 Hello World!)
我知道这个自定义函数没有实际用处。我只想了解 md5 哈希的工作原理。
---更新---
新功能(正常工作):
require 'digest'
module Puppet::Parser::Functions
newfunction(:lxwrite_line_to_file) do |args|
filename = args[0]
str = Digest::MD5.hexdigest args[1]
File.open(filename, 'w') {|fd| fd.puts str }
end
end
您正在使用哪个 ruby?
在 Ruby 2.0+ 中有一个 Digest
模块 (documentation here) - 为什么不使用它呢?
您可以使用 Digest
中可用的任何散列,如下所示:
Digest::MD5.digest '123'
=> " ,\xB9b\xACY\a[\x96K\a\x15-#Kp"
或者如果您更喜欢十六进制表示,请使用 hexdigest
Digest::MD5.hexdigest '123'
=> "202cb962ac59075b964b07152d234b70"
那里还有其他可用的哈希函数:
Digest::SHA2.hexdigest '123'
=> "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3"
目前我想从一个参数创建一个 md5 散列。然后我想把散列写入一个文件(路径是另一个参数)。
即自定义函数:
module Puppet::Parser::Functions
newfunction(:write_line_to_file) do |args|
require 'md5'
filename = args[0]
str = MD5.new(lookupvar(args[1])).to_s
File.open(filename, 'a') {|fd| fd.puts str }
end
end
以及 puppet 清单中的调用:
write_line_to_file('/tmp/some_hash', "Hello world!")
我得到的结果是一个文件,内容不是散列而是原始字符串。 (在示例 Hello World!)
我知道这个自定义函数没有实际用处。我只想了解 md5 哈希的工作原理。
---更新---
新功能(正常工作):
require 'digest'
module Puppet::Parser::Functions
newfunction(:lxwrite_line_to_file) do |args|
filename = args[0]
str = Digest::MD5.hexdigest args[1]
File.open(filename, 'w') {|fd| fd.puts str }
end
end
您正在使用哪个 ruby?
在 Ruby 2.0+ 中有一个 Digest
模块 (documentation here) - 为什么不使用它呢?
您可以使用 Digest
中可用的任何散列,如下所示:
Digest::MD5.digest '123'
=> " ,\xB9b\xACY\a[\x96K\a\x15-#Kp"
或者如果您更喜欢十六进制表示,请使用 hexdigest
Digest::MD5.hexdigest '123'
=> "202cb962ac59075b964b07152d234b70"
那里还有其他可用的哈希函数:
Digest::SHA2.hexdigest '123'
=> "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3"