ruby获取本机mac加密生成lisence文件,客户端根据lisence许可调用主程序

需求:

提取客户本机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文件。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值