ruby獲取本機mac加密生成lisence檔案,客戶端根據lisence許可呼叫主程式
阿新 • • 發佈:2019-01-07
需求:
提取客戶本機Mac地址,生成Md5值。(客戶使用,提供給廠商)
對該Md5值進行加密,生成lisence.txt檔案。(廠商生成)
獲取當前目錄的lisence檔案,解密,如果解密後與加密之前的md5值相等,則允許使用者執行主程式。(客戶使用)
一、使用macaddr獲取本機mac地址。
macaddr下載地址:https://github.com/ahoward/macaddr
下載後執行命令:gem install macaddr
執行後會在ruby安裝目錄相應位置生成macaddr-1.7.1、systemu-2.6.5(macaddr依賴包)資料夾。如我的是在:C:\Ruby23\lib\ruby\gems\2.3.0\gems\。
對macaddr進行修改:找到~/macaddr-1.7.1/lib/macaddr.rb檔案,將以下程式碼註釋:
# @mac_address = from_getifaddrs
# return @mac_address if @mac_address
即:只是用systemu獲取Mac地址。
可編寫一個mac.rb的ruby檔案,用於獲取Mac地址並生成md5值並列印,內容如下:
require 'macaddr' require 'digest' #Mac.addr #=> first mac addr on your system #Mac.addr.list #=> all mac addrs on your system puts Digest::MD5.hexdigest(Mac.addr.list.to_s)
二、加密生成的md5值,生成lisence檔案
編寫lisence.rb,內容如下:
require 'openssl' require 'pathname' $Key = ".........." #使用key = rand(36 ** 128).to_s(36)生成128位的祕鑰 def aes_encrypt(encrypted_string) aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB") aes.encrypt aes.key = $Key txt = aes.update(encrypted_string) << aes.final return txt.to_s end puts "Please input decode message:" var = STDIN.gets #puts var #puts aes_encrypt(var) dir = File.join("#{Dir.pwd}", "lisence.txt") #執行該程式後會在當前目錄生成一個lisence.txt檔案 file = File.new(dir,'w+') if file file.syswrite(aes_encrypt(var)) file.close else puts "Unable to open file!!" end
三、解密lisence檔案
在當前目錄中查詢lisence.txt檔案,獲取檔案內容,解密,並與加密之前的資料進行比對,相等則允許使用者訪問主程式。
def aes_dicrypt(dicrypted_string)
aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB")
aes.decrypt
aes.key = $Key #$Key為第二步中的$Key的值
abc= aes.update(dicrypted_string) << aes.final
return abc.to_s
end
path = Dir.pwd
#puts path
Dir.foreach(path){|f|
#puts f
if f == "lisence.txt"
content = ""
IO.foreach(f){|con|
content = content + con
}
#puts content
decode = aes_dicrypt(content)
encode = Digest::MD5.hexdigest(Mac.addr.list.to_s)
#puts decode
#puts encode
if decode.chomp != encode.chomp #加密前和加密後的值不等,則退出程式。否則,執行主程式
exit
end
break
end
}
以上程式碼可置於主程式呼叫之前。
可分別將上述.rb檔案使用ocra打包成exe檔案。如:
ocra C:/mac.rb
將會在當前目錄生成一個紅寶石圖示的exe檔案。