· 7 years ago · Nov 15, 2018, 03:24 AM
1require 'openssl'
2require 'Base64'
3
4SECRET_KEY = "EY6P1jNkoNSEsvowzlDjZ41HwQfC7abc"
5SECRET_IV = "sP0ZIJ45Ee3aAm7D独弦ç´"
6
7MAX_CIPHER_KEY_SIZE = 32
8MAX_CIPHER_IV_SIZE = 16
9
10def encrypt_uuid(uuid)
11 secretKey = truncate_large_value(SECRET_KEY, MAX_CIPHER_KEY_SIZE)
12 print "truncated secret key >>>> " + secretKey + "\n"
13 secretIv = truncate_large_value(SECRET_IV, MAX_CIPHER_IV_SIZE)
14 print "truncated secret iv >>>> " + secretIv + "\n"
15 cipher = OpenSSL::Cipher.new('aes-256-cbc')
16 cipher.encrypt
17 cipher.key = secretKey
18 cipher.iv = secretIv
19 cipher.padding = 1
20 encrypted = cipher.update(uuid)
21 encrypted << cipher.final
22 print "encrypted data >>>>> "
23 print encrypted
24 print "\n"
25 euuid = Base64.urlsafe_encode64(encrypted).encode('utf-8')
26 print euuid + + "\n"
27 return euuid
28end
29
30def decrypt_uuid(euuid)
31 print "euuid >>>> " + euuid + "\n"
32 secretKey = truncate_large_value(SECRET_KEY, MAX_CIPHER_KEY_SIZE)
33 print "truncated secret key >>>> " + secretKey + "\n"
34 secretIv = truncate_large_value(SECRET_IV, MAX_CIPHER_IV_SIZE)
35 print "truncated secret iv >>>> " + secretIv + "\n"
36 cipher = OpenSSL::Cipher.new 'aes-256-cbc'
37 cipher.decrypt
38 cipher.padding = 1
39 cipher.key = secretKey
40 cipher.iv = secretIv
41 decrypted = cipher.update(Base64.urlsafe_decode64(euuid))
42 decrypted << cipher.final
43 print decrypted + + "\n"
44 return decrypted
45end
46
47def truncate_large_value(value, max_length)
48 print "before val size >>> " + value.bytesize.to_s + "\n"
49 print "before val >>>>> " + value + "\n"
50 value = value.force_encoding('ASCII')
51 print "after val >>>>> " + value + "\n"
52 print "after val size >>> " + value.bytesize.to_s + "\n"
53 return value if value.bytesize == max_length
54
55 value[0..max_length - 1]
56end
57
58euuid = encrypt_uuid("eec84e94-6408-4850-98ff-ceb3a86f230c")
59decrypt_uuid(euuid)