View on GitHub

Qiqidone

He that breaks a thing to find out what it is has left the path of wisdom.

Openssl与加解密

一、Openssl

Openssl提供了市面上主流的加解密算法实现。这里先介绍下加密和Hash(散列):

Ruby提供的openssl模块可以满足主流的加密。以RC4为例:


            #加密
            require 'openssl'
            def rc4_encrypt(message)
                rc4 = OpenSSL::Cipher::Cipher.new("RC4")
                rc4.encrypt
                rc4.key = RC_KEY
                rc4.update(message)
                e << rc4.final
                # Make it purdy. Useful for database storage.
                e.unpack("H*")[0]
            end

            #解密
            def rc4_decrypt(message)
                rc4 = OpenSSL::Cipher::Cipher.new("RC4")
                rc4.decrypt
                rc4.key = YIXIN_RC_KEY
                rc4.padding = 0
                rc4.update(message)
            end
        

二、Base64

Base64: 一种基于64个可打印字符来表示二进制数据的表示方法, 使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。

网络传输中加解密一般都要求以Base64的格式传输数据,所以一般加密之后都要先转成Base64.解密的时候则先decode回来。 Base64代码:


            def strict_encode(bin)
                [bin].pack("m0")
            end
        

另外值得一提的是,网络传输比如url里面的参数一般都会做utf-8编码,有时候返回的数据也会是utf-8编码,而这些编码就会变成十六进制,但本地语言又不直接接受,则需要重新转回本地语言的编码方式, 所以在网络传输是要进行预编码escape,将某些字符被替换成了十六进制的转义序列(除去ASCII字母和数字以及公用的字符),这样所有的计算机语言都能接受。 反之,需要反编码传回的数据,所以有了CGI.unescape(data, CGI::Encoding::UTF_8))这样的函数做utf8 to native encoding。


            def utf8_to_native(data)
                CGI.unescape(data, CGI::Encoding::UTF_8))
            end
        

Authors and Contributors

Qiqidone (@qiqidone) can be founded GitHub.

Index

首页