
什么是加密与解密
加密incode:对明文(可读懂的信息)进行翻译,使用不同的算法对明文以代码形式(密码)实施加密。
该过程的逆过程称为“解密(descode)”:即将该编码信息转化为明文的过程。
解读:从数据可读至数据不可读,又能反向从数据不可读转至数据可读的过程。从而保护数据不被读取篡改。
加密的历史事件
完美女谍:辛西娅
二战伊始,美国人帕克就向英国情报机构展示了她的间谍才干。她利用意大利驻美国大使馆中老朋友的关系,窃得意海军密码系统。1941年5月,帕克化名“辛西娅”,假扮美国记者,接近法国维希政府驻美使馆新闻官布鲁斯。布鲁斯对她一见钟情。两人联手搞到法国海军密码。布鲁斯1946年迎娶辛西娅,两人在法国乡村古堡中安度晚年。
纳瓦霍人
纳瓦霍语是一种古老的语言,世代口口相传,虽然复杂却不成文。用它作为密码保密性极强,且编译的速度却极快。而且纳瓦霍语中根本没有现代战争中的名词,美军使用了大量日常词汇代替军事术语。比如,猫头鹰代表直升机、鲨鱼是驱逐舰、像树叶是中校等等。日本人毫无悬念地截获了美军电报,但他们绞尽脑汁也不明白这些人说的到底是什么。代表作《风语者》。
棱镜门
棱镜计划(PRISM):是一项由美国国家安全局自2007年起开始实施的绝密电子监听计划。该计划的正式名号为“US-984XN”。
常用的窃密方式
坑:
制作误导性网站诱导用户输入类似信息。
蒙:
①:瞎蒙,即穷举法。
②:根据用户个人信息猜测。
拐:诱导用户输入用户名密码。
骗:假借官方账号电话,诱导用户透露个人信息及用户密码。
偷:通过木马,后门等间谍活动获取用户个人信息(棱镜门)。
加密的基本原理
可逆加密
即制作固定密码本分对称加密和非堆成加密,将正常的数据打乱 比如 原始顺序 1234567890 密钥本2543160879 ,如果我想传输123456 则加密后的数据位254316 达到加密后的效果,反向推导可得到123456加密数据,这个称之为对称加密。外网手机通讯使用的是非对称加密,每台手机有个属于自己的加密算法和解密逻辑,非公用,而手机与服务器之间的通讯是使用公钥加密,是通用的通讯加密手段。
不可逆加密
如果数据存在丢失,随机值,则加密数据不可逆 比如说:123456 加密后结果j234 则该加密数据不可逆。
英文26个字母大小写 共 52个 数字0-9 共10个 键盘常用符号共32个 总共常用字符94个。
94*94 *94 *94 *94 *94=6898 6978 1056 种组合 六位数密码 。
银行卡密码:10*10*10*10*10*10 =1000000种组合 。
加密的常用方式
内容换位法
明文:八月六日晚上十点十分有月全食 密文:十月十日晚上八点六分有月全食
将军令
时间密钥算法

密钥卡
随机密钥位置

MD5
MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
AES加密算法
AES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现,这个标准用来替代原先的DES
RSA加密算法
RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数宇签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
Base64加密算法
Base64加密算法是网络上最常见的用于传输8bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息
加密的实际应用
银行项目中,很多数据涉及到用户的隐私,但又有必要对相关部门提供对应数据,则会要求其数据脱敏,包括姓名,身份证号,手机号,座机号,银行卡,地址之类的数据。
解决方案
身份证,手机号,座机号,银行卡这类数据为固定位数,即使加密后也需要保留对应长度,用于其他部门辨识该字段数据,亦能用于测试。
难点
中英文及特殊符号内容较多,无法制作全量加密表,所以再加值计算的时候需要考虑可行性,一般制作不可逆加密
需求分析
通用加密函数
1,card_ch(String inVal); //inVal: 待加密内容
2,card_ch(String inVal, int reserveLength); inVal: 待加密内容, reserveLength: 保留最后位数长度
要求:
a, 原文及密文的位数不变,卡号保持唯一性,使用MD5码加密截取
b, 通用函数包含中文加密, 为了保证SAS不报错
身份证加密函数
1,card_person(String inVal); //inVal: 待加密内容
要求:
a, 18位原文 =>18位密文,15位原文=>15位密文, 其他位数使用通用函数加密。
b, 18位加密后的15位=15位加密
c,其他证件号保留除数字,英文以外的内容保留原数据
问题与难点
通用加密方法需要支持各种类型,同时需要考虑长度不改变,再有些特定的业务情况下,我们需要考虑银行卡,身份证之类的数据读取没有问题,即使加密后也应保证数据为全数字。
加密要支持可以保留末尾几位,包括纯数字情况和其它情况,所以处理方法发分两步,首先判断是否为全数字,若为全数字,则需要按照全数字的方法加密并保留,否则加密按照含有中文加密方法。
SAS取数为GBK ,默认情况下hive建表为UTF-8 。由于对hive数据库的不了解,首先想到的是hive导出数据并转成用户需要的数据导入SAS服务器,但由于操作复杂。鉴于之前对数据库的了解可猜想到hive库的单表也可以指定字符集,遂通过测试研究出字符集为GBK的建表语句,并制成解决方案。
身份证加密需要做到18位加密后通过转成15位后加密的结果可以匹配。由于之前所开发的加密方法位错位加权加密计算,位数不同,则加密结果不同,随先将18位身份证截为15位身份证加密后补回为18位,末尾校验位加密 例如:310330198809022513 转成15位 310330880902251截取年份19跟末尾校验位3 随后加密后将19补回,将3加密后补回 15位加密结果依然为15位,可以使用通用加密方式。
SAS数据乱码问题
背景
AS系统只支持GBK文件格式,而hive数据默认建表为UTF-8格式,从UTF-8表中数据使用 insert into select from语法转移数据会默认以UTF-8编码格式存入GBK编码格式,出现数据乱码问题。
解决SAS数据提取乱码问题
第一步:创建GBK字符集数据表
案例:CREATE TABLE student8(id STRING, name STRING)
ROWFO RMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES(serialization.encoding"='GBK')
第二步:导入方法
案例:add jar tmp/card-encrypthion-1.0-SNAPSHOT.jar;
create temporary function card_person as "org.bcm.card.GenericCardPersonUDF";
create temporary function card_ch as "org.bcm.card.GenericCardCHUDF";
create temporary function card_self as "org.bcm.card.GenericCardSelfUDF";
第三步:插入表数据
案例:insert into test_card6(home_address1, home_address2,home_city, home_address1_cn, home_address2_cn, home_city_cn) select card_self(home_address1), card_self(home_address2), card_self(home_city), card_ch(home_address1), card_ch (home_address2), card_ch(home_city) from eagle_eye_base;
第四步:SAS数据导出

功能扩展与思想
解密价值取决于信息价值。若价值大于解密价值,则解密存在意义。若价值低于解密价值,则解密无意义。
战争解密的价值大于一切,战争信息的获取利于把握战机,挽救生命。
注意个人信息的保护,信息安全重在点滴。
避免过度加密,按照实际情况制定合理的加密强度。
作者:李春
编辑:徐菲

据说中国有句古语叫「金无足赤,人无完人」,但是,如果谁真的想打起灯笼来到市面上寻找完人,最终令他感到的可能不是一种失望,而是一种意外:完人可能就是那些终日为「善」而奔走,而又在不知不觉中实现了「美」的「真」实不虚的普通人。
追求完美是正常而有缺憾的人性。
--尼采





