文档章节

聊天记录解密

IT-sticker
 IT-sticker
发布于 2016/04/25 15:36
字数 332
阅读 10
收藏 0

其实这个功能的总思路是 包所有的QQ聊天记录和旺旺的聊天记录先拷贝到word,让word把图片进行base64的加密,切记word保存时候的格式是mht的

比如我保存了一份聊天记录,用notepad++打开


可以看到在<!--StartFragment-->
          <!--EndFragment-->标签内容才是你拷贝的内容图片后面的src是content-Location后面的字符


后面我们就是解析了

public String newAddServeRecord() {  
  1.         InputStreamReader r = null;  
  2.         BufferedReader br = null;  
  3.         try {  
  4.             String uploadPath = Tools.getStrutsProp().getValue("uploadPath")  
  5.                     + "recordImgs/";  
  6.             File recf = new File(uploadPath);  
  7.             recf.mkdirs();  
  8.             String urlPath = Tools.getStrutsProp().getValue("urlPath")  
  9.                     + "recordImgs/";  
  10.   
  11.             r = new InputStreamReader(new FileInputStream(mhtFile), "UTF-8");  
  12.             br = new BufferedReader(r);  
  13.               
  14.             String result = "";  
  15.             Map<String, String> imgMap = new HashMap<String, String>();  
  16.               
  17.             String startFragment = "<!--StartFragment-->";  
  18.             String endFragment = "<!--EndFragment-->";  
  19.             String base64 = "Content-Transfer-Encoding: base64";  
  20.             String location = "Content-Location: ";  
  21.   
  22.             String str = null;  
  23.             while ((str = br.readLine()) != null) {  
  24.                 if (str.indexOf(startFragment) != -1) {  
  25.   
  26.                     if (str.indexOf(endFragment) != -1) {  
  27.                         result += str.substring(str.indexOf(startFragment)  
  28.                                 + startFragment.length(),  
  29.                                 str.indexOf(endFragment));  
  30.                     } else {  
  31.                         result += str.substring(str.indexOf(startFragment)  
  32.                                 + startFragment.length(), str.length());  
  33.                     }  
  34.                 }  
  35.   
  36.                 if (str.indexOf(endFragment) != -1) {  
  37.                     result += str.substring(0, str.indexOf(endFragment));  
  38.                 }  
  39.   
  40.                 if (str.indexOf(base64) != -1) {  
  41.                     String locationPath = br.readLine();  
  42.                     locationPath = locationPath.replace(location, "");  
  43.   
  44.                     br.readLine();  
  45.                     String base64Img = br.readLine();  
  46.                     imgMap.put(locationPath, base64Img);  
  47.                 }  
  48.   
  49.             }  
  50.   
  51.             result = result.replaceAll("=20"" ").replaceAll("=3D""=")  
  52.                     .replaceAll("<IMG""<img");  
  53.   
  54.             for (String key : imgMap.keySet()) {  
  55.                 byte[] imgByte = Base64.decode(imgMap.get(key));  
  56.   
  57.                 String fileName = Tools.getDateToSEC() + Tools.getThree()  
  58.                         + key.substring(key.lastIndexOf("."));  
  59.   
  60.                 FileOutputStream imgOut = new FileOutputStream(uploadPath  
  61.                         + fileName);  
  62.                 imgOut.write(imgByte);  
  63.                 imgOut.close();  
  64.                 result = result.replace(key, urlPath + fileName);  
  65.             }  
  66.               
  67.             // 写入数据库   
  68.             ServeRecord sr = new ServeRecord();  
  69.             sr.setDate(new Date());  
  70.             sr.setContent(result);  
  71.             sr.setServeCustomer(((Admin) getSession().get(Constant.ADMIN))  
  72.                     .getName());  
  73.             sr.setCustomerId(customer.getId() + "");  
  74.             serveRecordDao.insert(sr);  
  75.             state = "okrecord";  
  76.         } catch (Exception e) {  
  77.             logger.error("CustomerManagerAction.newAddServeRecord", e);  
  78.             return ERROR;  
  79.         } finally {  
  80.             try {  
  81.                 if (null != br) {  
  82.                     br.close();  
  83.                 }  
  84.                 if (null != r) {  
  85.                     r.close();  
  86.                 }  
  87.             } catch (IOException e) {  
  88.                 logger.error(  
  89.                         "CustomerManagerAction.newAddServeRecord[close] error!",  
  90.                         e);  
  91.                 return ERROR;  
  92.             }  
  93.         }  
  94.         return SUCCESS;  
  95.     }  

本文转载自:http://blog.csdn.net/zhejingyuan/article/details/9149863

IT-sticker
粉丝 0
博文 85
码字总数 1862
作品 0
珠海
程序员
私信 提问
QQ2012 Beta3->QQ2013 Beta1聊天协议剖析

http://www.cnhonkerarmy.com/forum.php?mod=viewthread&tid=153514 背景 QQ,一个通信工具,号称拥有N亿,现在注册QQ已经是10位数了,如果QQ注册的号码是不断递增的话,那么QQ应该已经被注册...

nothingfinal
2013/10/13
0
0
关于android开发使用sqlcipher解密db文件的疑问

最近在给公司做安卓版微信聊天记录的监控项目,开发工具使用的是android studio 1.4.测试环境是逍遥安卓模拟器。 大家都知道,微信的EnMicroMsg.db文件是使用sqlcipher加密的,而我现在想提取...

媳妇萌萌哒
2016/04/14
1K
2
AES和ECC的混合加密

在上面对AES加密的初步认知中,我们知道AES加密需要一个key,加减密双方都需要知道,那这个key怎么设定好?看一下下面的一种场景:在社交的APP中,一般对聊天内容都会是加密的,A和B聊天,A...

wesk痕
2016/10/17
464
0
Android 版 WhatsApp 曝漏洞:聊天记录可被窃取

创业公司DoubleThink CTO巴斯·博斯奇特(Bas Bosschert)发现,Android版移动聊天服务WhatsApp的一个安全漏洞,导致其他应用可以访问和读取用户的所有聊天记录。 博斯奇特已经将使用这一漏洞的...

oschina
2014/03/14
3.3K
11
解密聊天记录数据库

解密聊天记录数据库 微信6.2.5使用sqlcipher进行AES加密,因此我们要得到密钥,根据编译的信息,可以得知微信使用 key=md5(IMEI+uin) | cut -c -7 , 即取md5的前7位做为密钥。解密微信聊天数...

伽罗kapple
2016/05/01
243
0

没有更多内容

加载失败,请刷新页面

加载更多

JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
7
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
14
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
3K
24
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
46
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部