敏感数据加密

今天有同事问我如何给数据库中的敏感数据加密问题,开始没相到什么方法,后来查了下手册,可以通过
   PostgreSQL 的 pgcrypto 模块实现,下面是实验步骤:

一 环境准备
--1.1 创建外部模块 pgcrypto

 mydb=# create extension pgcrypto ;
CREATE EXTENSION

--1.2 创建测试表

 mydb=> create table test_user(id serial,username varchar(32),password text);
NOTICE:  CREATE TABLE will create implicit sequence "test_user_id_seq" for serial column "test_user.id"
CREATE TABLE

mydb=> create unique index idx_test_user_username on test_user using btree (username);
CREATE INDEX

mydb=> \d test_user
                                  Table "mydb.test_user"
  Column  |         Type          |                       Modifiers                        
----------+-----------------------+--------------------------------------------------------
 id       | integer               | not null default nextval(‘test_user_id_seq‘::regclass)
 username | character varying(32) | 
 password | text                  | 
Indexes:
    "idx_test_user_username" UNIQUE, btree (username)

方法一:使用 md5 加密    
--2.1 插入测试用户信息

 mydb=> insert into test_user(username,password) values  (‘user1‘,md5(‘123456‘));
INSERT 0 1
mydb=> insert into test_user(username,password) values  (‘user2‘,md5(‘123456‘));
INSERT 0 1

--2.2 查询用户信息,解密

 mydb=> select * From test_user;
 id | username |             password             
----+----------+----------------------------------
  1 | user1    | e10adc3949ba59abbe56e057f20f883e
  2 | user2    | e10adc3949ba59abbe56e057f20f883e
(2 rows)

mydb=> select * From test_user where password=md5(‘123456‘);
 id | username |             password             
----+----------+----------------------------------
  1 | user1    | e10adc3949ba59abbe56e057f20f883e
  2 | user2    | e10adc3949ba59abbe56e057f20f883e
(2 rows)

备注:使用 md5 加密后,如果两个用户的密码相同,那么 md5 加密后的密码也一样,如果破解了一个 md5 密码,
           那么很容易破解 md5 值相同的密码。
      
      
三 方法二: 使用  crypt() 函数加密      
--3.1 使用 crypt() 函数增加两条用户信息

 mydb=> insert into test_user(username,password) values  (‘user3‘,crypt(‘123456‘,gen_salt(‘md5‘)));
INSERT 0 1
mydb=> insert into test_user(username,password) values  (‘user4‘,crypt(‘123456‘,gen_salt(‘md5‘)));
INSERT 0 1

--3.2 查询新增用户信息

 mydb=> select * From test_user where username in (‘user3‘,‘user4‘);
 id | username |              password              
----+----------+------------------------------------
  5 | user3    | $1$cS7Bs67A$5c2FTClGTOBYiHpG1HyvA/
  6 | user4    | $1$L6Rao5/l$7URcaCbT9Hrsrt9JcoBGq.
(2 rows)

备注:虽然 user3,user4 使用相同的密码,但经过 crypt() 函数加密后,加密后的密码值不同,
              显然,这种加密方式要比 md5 安全。

--3.3 查询,解密测试

 mydb=> select * From test_user where username =‘user3‘ and password=crypt(‘123456‘,password);
 id | username |              password              
----+----------+------------------------------------
  5 | user3    | $1$cS7Bs67A$5c2FTClGTOBYiHpG1HyvA/
(1 row)

mydb=> select * From test_user where username =‘user4‘ and password=crypt(‘123456‘,password);
 id | username |              password              
----+----------+------------------------------------
  6 | user4    | $1$L6Rao5/l$7URcaCbT9Hrsrt9JcoBGq.
(1 row)

四附:函数
--4.1 crypt()
crypt(password text, salt text) returns text

Calculates a crypt(3)-style hash of password. When storing a new password, you need to use gen_salt() to generate a new salt value. To check a password, pass the stored hash value as salt, and test whether the result matches the stored value.

--4.2  crypt() 函数支持的加密算法

--4.3 gen_salt()
gen_salt(type text [, iter_count integer ]) returns text

Generates a new random salt string for use in crypt(). The salt string also tells crypt() which algorithm to use.
The type parameter specifies the hashing algorithm. The accepted types are: des, xdes, md5 and bf.

-------------------------------------分割线---------------------------------------------

转自:http://francs3.blog.163.com/blog/static/4057672720123267457650/

时间: 2024-10-12 17:01:42

敏感数据加密的相关文章

Atitit。数据库 安全性 重要敏感数据加密存储解决方案

1.1. 加密存储的重要性1 1.2. 使用的加密算法aes1 1.3. 数据加密以后会有一些问题.1 1.3.1. 一个是统计,比如统计资金总额..就无法直接使用sql的sum等数据库内部聚合函数来处理了..1 1.3.2. 还有一个就是按照金额检索,比如多少资金以下的用户..1 1.1. 加密存储的重要性 特别是对于一些金融相关的,账户模块 资金模块等. 可以防止数据库管理员或者黑客直接使用数据库管理工具看到重要敏感的数据.. 必须把程序和数据库结合才能看到解密数据.大大提升安全性.. 1.

C#编程总结(七)数据加密——附源码

C#编程总结(七)数据加密——附源码 概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取.阅读的目的. 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程.加密建立在对信息进行数学编码和解码的基础上.加密类型分为两种,对称加密与非对称加密,对称加密双方采用共同密钥.非对称加密,这种加密方式存在两个密钥,一个是公共密钥(对外公开),一种

全程软件测试之测试需求分析与计划

全程软件测试之测试需求分析与计划 在项目启动之后,就要着手软件项目的计划,包括软件测试计划.软件测试计划是整个开发计划的组成部分,同时,它又依赖于软件组织过程.项目的总体计划.质量文化和方针.在测试计划活动中,首先要确认测试目标.范围和需求,其中"测试需求分析"是关键任务,然后在测试需求基础上制定测试策略,并对测试任务.时间.资源.成本和风险等进行估算或评估. 无论何时进行估算,我们都是在预测未来,并会接受某种程度的不确定性.软件项目计划的目标是提供一个框架,不断收集信息,对不确定性进

程序员之网络安全系列

转自:程序员之网络安全系列(一):为什么要关注网络安全? 假如,明明和丽丽相互不认识,明明想给丽丽写一封情书,让隔壁老王送去 如何保证隔壁老王不能看到情书内容?(保密性) 如何保证隔壁老王不修改情书的内容?(完整性) 如何保证隔壁老王不冒充明明?(身份认证) 如何保证明明不能否认情书是自己写的?(来源的不可否认) 前言 大家都知道最近几年闹的沸沸扬扬的网络安全事件,之前的CSDN密码泄露,不久前的网易邮箱密码泄露,那么如果你的密码泄露,除了本身的网站外,还有很多人其它很多地方甚至银行密码都使用相

大数据时代 云安全4大策略

云计算与大数据的结合可以说是天作之合.大数据需要灵活的计算环境,而后者可以快速.自动地进行扩展以支持海量数据,基础设施.但是无论什么时候对云计算展开讨论,我们都无法回避以下问题: 针对大数据的云安全策略是什么? 当在大数据使用案例中提及云安全策略时,我们希望任何安全解决方案都能够在不影响部署安全性的情况下提供与云一样的灵活性.在将大数据转移至云上时,以下四个小贴士可以让用户既能享受到云计算的灵活性又能获得严格的云安全策略. 1.将敏感数据加密(强烈推荐) 数据加密将会为你的云基础设施建起一堵"虚

产品安全设计十大原则

产品安全设计十大原则 原则1:最小化攻击面:          系统每增加一个功能特性就有可能会引入新的风险,通过安全开发可以减少攻击面进而达到控制系统整体风险的目的.          打个比方说,某在线web应用向用户提供了一个通过搜索来获取帮助的功能,如果后端代码没有正确实现该功能就有可能导致存在SQL注入漏洞,但是即便如此,我们还是有办法降低或消除风险的,比如: u  该帮助功能只能被授权的用户使用. u  后端代码对用户输入的数据进行了校验. u  帮助功能不支持搜索,只支持查看. 可

Mysql 数据库字段加密

1 数据库字段加密: 2 4.20. 数据加密 3 数据库中有很多敏感字段,不允许随意查看,例如开发人员,运维人员,甚至DBA数据库管理员.另外加密主要是防止被黑客脱库(盗走) 4 敏感数据加密有很多办法,可以用数据库内部加密函数,也可以在外部处理后写入数据库.加密算法有很多种,但通常两类比较常用,一种是通过key加密解密,另一种是通过证书加密解密. 5 通常程序员负责写程序,程序交给运维配置,运维将key设置好,运维不能有数据库权限,DBA只能登陆数据库,没有key权限. 6 4.20.1.

Oracle数据库SQL注入浅析与防护建议

作者:安华金和 思成 SQL注入是在信息安全领域一种常见的攻击手段.但是大部分人理解的SQL注入就是通过把SQL命令插入到Web表单提交或在输入域名.页面请求时加入的查询字符串,最终达到欺骗服务器执行偏离预期的SQL命令.这种情况下的SQL注入,引发原因基本是网页对用户输入的信息缺乏校验而导致. 很多人认为只有网页才可以进行 SQL 注入,才有注入点.这是一个普遍对SQL 注入的错误认识.SQL注入严格来讲应该叫做数据库SQL注入.SQL注入的最终目的是获取数据库中存储的敏感信息.事实上,任何可

HTTPS传输协议原理

我们常常在使用网上银行时看到的连接都是以“https”开始的,那么这个https是什么呢?这其实是表示目前连接使用了SSL进行加密,能保证客户端到服务器端的通信都在被保护起来,那么浏览器是如果实现的呢?下面让我们来介绍一下SSL基本的实现方法. 首先我们有两种基本的加解密算法类型:对称加密,非对称加密(公私钥加密),现在介绍一下这两种加密算法的特点: 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES.AES等,示意图如下: 图1 对称加密 非对称加密:密钥