今天接到的任务:需要处理比对第三方提供的姓名和XX号码,由于信息保密特殊原因,这些数据给到我们这边是通过md5加密的,需要我们匹配我方内部数据是否有对方提供的信息是否核对,
任务需求:匹配加密字段是否一致
任务分析:1.对方文件A 字段 a b c ,其中abc都是通过function md5加密
2.我方文件 B 通过字段 a b c ....。abc为明文 需要关联匹配的A表
步骤:
1.将A表和B表导入oracle
2.使用function对B表a字段加密 生成 md5_a
3.对比 A.a=B.md5_a 等这个个字段比值,获取 B中 party_id 进行后续处理。
坑:
1.导入匹配后,发现一个也匹配不上。以为是function md5方法问题,后经过跟第三方比对使用同一字符串进行加密,比对加密后字符串发现没有问题。后跟第三方沟通确认,应该是提供的加密数据有问题。
2.第二次发过来,发现通过inner join 关联2个表,反而匹配的字段数过多。研究发现,仅通过字段值a 有过多重复数据,不能有效匹配数据,因此需使用 a和b同时进行匹配。 b是汉字模块。
3.对 A.a=B.md5_a and A.b=B.md5_b 进行比对时,新问题出现了 一个也匹配不上。经过反复对比,发现我跟第三方使用同样的function对相同汉字进行加密,加密结果不同。继续研究,发现是双方数据库characterset字符集不一样造成的。我使用的是zh16gbk 对方使用 al32utf8
解决方案:修改数据库字符集显然不太合适,临时找或者新建数据库也不现实。后来使用了convert函数解决了字符串编码问题。
select md5(convert(B.b,'AL32UTF8') from B;
参考文档;http://blog.itpub.net/30393770/viewspace-1869124/