“ 简单的加密/解密处理,就偷点懒,直接用数据库自带的函数了……”
工作中,会有一些数据,往数据库里面存储的时候,不能以明文的方式存储,比如手机号码啊、用户密码之类的。
用户密码之类的,单向的,还好办,只加密,不解密的。
注册的时候,做一下加密,然后存储到数据库。
登录的时候,是拿输入的密码,去做加密的操作,然后,拿加密的结果,与数据库里面,注册的时候的加密结果,做对比,一样的话,就认为是密码正确,否则就是密码不正确。
而手机之类的,是双向的了,存储的时候,要加密,读取的时候,要解密。
也就是,写入的时候,需要做一下加密的操作,然后再存储到数据库里面。
读取的时候,需要从数据库读出来了,做一下解密的操作,再拿去做后续的处理。
一般来说,加密/解密的处理,都是用编程语言来做的。
比如 Java 、 C#、Python 之类的语言,来处理。
就是要调用各自的 加密/解密的 类库,来处理了。
但是,想一想,一些简单的加密函数,如果数据库自身就带有相关函数的话。
那编程语言, 直接调数据库的函数就完了,不需要去引用类库,然后再调用了。
看了一下,MySQL 自带了一些, PostgreSQL,是需要安装一个 pgcrypto 扩展。
下面是一些简单的例子
AES-128-ECB 模式 - 加密
mysql
SET block_encryption_mode = 'aes-128-ecb';
SELECT
to_base64(
AES_ENCRYPT(
'测试需要加密的文本:12312345678',
'0123456789ABCDEF'));
postgresql
SELECT
encode(
encrypt(
convert_to('测试需要加密的文本:12312345678', 'UTF8'),
convert_to('0123456789ABCDEF', 'UTF8'),
'aes-ecb/pad:pkcs'), 'base64');
结果都是:
Q5ZotPBdieWSWbhXver3gEm9xG7RC5MjCN2gJ3+LYM/C7YrxZtZKxD5NVwKt7TiB
AES-128-ECB 模式 - 解密
mysql
SET block_encryption_mode = 'aes-128-ecb';
SELECT
CONVERT(
AES_DECRYPT(
FROM_BASE64('Q5ZotPBdieWSWbhXver3gEm9xG7RC5MjCN2gJ3+LYM/C7YrxZtZKxD5NVwKt7TiB'),
'0123456789ABCDEF') USING utf8);
postgresql
SELECT
convert_from(
decrypt(
decode('Q5ZotPBdieWSWbhXver3gEm9xG7RC5MjCN2gJ3+LYM/C7YrxZtZKxD5NVwKt7TiB', 'base64'),
convert_to('0123456789ABCDEF', 'UTF8'),
'aes-ecb/pad:pkcs'), 'UTF8');
结果都是:
测试需要加密的文本:12312345678
AES-128-CBC 模式 - 加密
mysql
SET block_encryption_mode = 'aes-128-cbc';
SELECT
to_base64(
AES_ENCRYPT(
'测试需要加密的文本:12312345678',
'0123456789ABCDEF',
'0987654321123456'));
postgresql
SELECT
encode(
encrypt_iv(
convert_to('测试需要加密的文本:12312345678', 'UTF8'),
convert_to('0123456789ABCDEF', 'UTF8'),
convert_to('0987654321123456', 'UTF8'),
'aes-cbc/pad:pkcs'), 'base64');
结果都是:
n18n8PDiMi/F950WLAcEQUmc3yaECLX/Rlpp4OKiuDlFpA/6LFsV5hrDtvMqSTd2
AES-128-CBC 模式 - 解密
mysql
SET block_encryption_mode = 'aes-128-cbc';
SELECT
CONVERT(
AES_DECRYPT(
FROM_BASE64('n18n8PDiMi/F950WLAcEQUmc3yaECLX/Rlpp4OKiuDlFpA/6LFsV5hrDtvMqSTd2'),
'0123456789ABCDEF',
'0987654321123456') USING utf8);
postgresql
SELECT
convert_from(
decrypt_iv(
decode('n18n8PDiMi/F950WLAcEQUmc3yaECLX/Rlpp4OKiuDlFpA/6LFsV5hrDtvMqSTd2', 'base64'),
convert_to('0123456789ABCDEF', 'UTF8'),
convert_to('0987654321123456', 'UTF8'),
'aes-cbc/pad:pkcs'), 'UTF8');
结果都是:
测试需要加密的文本:12312345678

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!
优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、微信小程序定制开发、移动端应用(手机站、APP开发)、微信定制开发(微信官网、微信商城、企业微信)等一系列互联网应用服务。