概念

明文

是指没有加密的文字(或者字符串),一般人都能看懂的意思,属于密码学术语。
在通信系统中它可能是比特流,如文本、位图、数字化的语音或者数字化的视频图像等。

密钥

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。

密文

密文是加了密的的文字,明文是加密之前的文字。

对称加密

在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

对不对称区别

对称加密:加解密用同一密钥,密钥维护复杂n(n-1)/2,不适合互联网传输密钥,加解密效率高。应用于加密数据。


非对称加密:公钥推不出私钥,每个用户一个非对称密钥对就可以,适合于互联网传输公钥,但是加密效率低,应用于数字签名及加密。

RC4

RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。

  1. //程序开始
  2. #include<stdio.h>
  3. #include<string.h>
  4. typedef unsigned longULONG;
  5. /*初始化函数*/
  6. void rc4_init(unsigned char*s, unsigned char*key, unsigned long Len)
  7. {
  8. int i = 0, j = 0;
  9. char k[256] = { 0 };
  10. unsigned char tmp = 0;
  11. for (i = 0; i<256; i++)
  12. {
  13. s[i] = i;
  14. k[i] = key[i%Len];
  15. }
  16. for (i = 0; i<256; i++)
  17. {
  18. j = (j + s[i] + k[i]) % 256;
  19. tmp = s[i];
  20. s[i] = s[j];//交换s[i]和s[j]
  21. s[j] = tmp;
  22. }
  23. }
  24. /*加解密*/
  25. void rc4_crypt(unsigned char*s, unsigned char*Data, unsigned long Len)
  26. {
  27. int i = 0, j = 0, t = 0;
  28. unsigned long k = 0;
  29. unsigned char tmp;
  30. for (k = 0; k<Len; k++)
  31. {
  32. i = (i + 1) % 256;
  33. j = (j + s[i]) % 256;
  34. tmp = s[i];
  35. s[i] = s[j];//交换s[x]和s[y]
  36. s[j] = tmp;
  37. t = (s[i] + s[j]) % 256;
  38. Data[k] ^= s[t];
  39. }
  40. }
  41. int main()
  42. {
  43. unsigned char s[256] = { 0 }, s2[256] = { 0 };//S-box
  44. char key[256] = { "justfortest" };
  45. char pData[512] = "这是一个用来加密的数据Data";
  46. unsigned long len = strlen(pData);
  47. int i;
  48. printf("pData=%s\n", pData);
  49. printf("key=%s,length=%d\n\n", key, strlen(key));
  50. rc4_init(s, (unsigned char*)key, strlen(key));//已经完成了初始化
  51. printf("完成对S[i]的初始化,如下:\n\n");
  52. for (i = 0; i<256; i++)
  53. {
  54. printf("%02X", s[i]);
  55. if (i && (i + 1) % 16 == 0)putchar('\n');
  56. }
  57. printf("\n\n");
  58. for (i = 0; i<256; i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!
  59. {
  60. s2[i] = s[i];
  61. }
  62. printf("已经初始化,现在加密:\n\n");
  63. rc4_crypt(s, (unsigned char*)pData, len);//加密
  64. printf("pData=%s\n\n", pData);
  65. printf("已经加密,现在解密:\n\n");
  66. //rc4_init(s,(unsignedchar*)key,strlen(key));//初始化密钥
  67. rc4_crypt(s2, (unsigned char*)pData, len);//解密
  68. printf("pData=%s\n\n", pData);
  69. return 0;
  70. }
  71. //程序完

明文攻击

压缩包

相关书籍

密码简史——穿越远古 展望未来

一部关于密码的科普著作,既介绍了从古到今的各种有重大影响的通信密码知识、技术、人物、事件及历史,还展望了量子密码、抗量子密码、量子计算机和DNA计算机等未来密码。
本书既适合大众阅读,也适合信息安全及密码等领域的专业人士阅读和参考。

内容简介

在人类的历史长河中,密码始终给人一种神秘的印象。在相当长的时期内,密码与政治和军事斗争密不可分,无论是在古代战场,还是在现代战争中,密码都扮演着重要的角色,是交战双方加密、破译、传递、获取情报的重要手段,也因此成为许多影视剧特别是谍战剧中的重要元素。在当前信息网络时代,密码被广泛地应用于政治、经济、社会各个方面,密码不仅是维护网络空间安全的重要法宝,也是构筑网络信息系统免疫体系和网络信任体系的基石。甚至可以说,密码直接关系国家政治安全、经济安全、国防安全和信息安全,不仅是保护国家和人民根本利益的战略性资源,还是实现国家治理体系和治理能力现代化的重要支撑。
  《密码简史——穿越远古 展望未来》是一部关于密码的科普著作。读者不但能从书中了解到外国古典密码、中国古典密码、近代密码、一战密码、机械密码、二战密码、现代密码等通信密码的前世今生,更能站在符号系统的全新高度,向前回顾密码对人类“占据并稳居生物链顶端”所做出的巨大贡献,向后展望量子密码、抗量子密码、量子计算机和DNA计算机等未来密码;不但让读者体会密码破译的精彩游戏,还提醒了密码研究的两个重要方向,即“抗DNA计算密码”和针对特定人或事的密码“通用”破译系统。

图解密码技术

电子书下载地址

内容简介

详细讲解了6种重要的密码技术:对称密码、公钥密码、单向散列函数、消息认证码、数字签名和伪随机数生成器。 <br />第1部分讲述了密码技术的历史沿革、对称密码、分组密码模式(包括ECB、CBC、CFB、OFB、CTR)、公钥密码、混合密码系统。<br />第2部分重点介绍了认证方面的内容,涉及单向散列函数、消息认证码、数字签名、证书等。<br />第3部分讲述了密钥、随机数、PGP、SSL/TLS 以及密码技术在现实生活中的应用。<br />第3版对旧版内容进行了大幅更新,并新增POODLE攻击、心脏出血漏洞、Superfish事件、SHA-3竞赛、Keccak、认证加密、椭圆曲线密码、比特币等内容。

加密与解密

编辑推荐

这本厚重的图书,包含了当今Windows环境下软件逆向和保护技术的绝大部分内容。从基本的跟踪调试到深层的虚拟机分析,从浅显的逆向分析到中高级软件保护,其跨度之广、内容之深,国内尚无同类出版物能与之比肩。

内容简介

本书以软件逆向为切入点,讲述了软件安全领域相关的基础知识和技能。读者阅读本书后,很容易就能在逆向分析、漏洞分析、安全编程、病毒分析等领域进行扩展。这些知识点的相互关联,将促使读者开阔思路,使所学融会贯通,领悟更多的学习方法,提升自身的学习能力。
本书适合安全技术相关工作者、对逆向调试技术感兴趣的人、对软件保护感兴趣的软件开发人员、相关专业在校学生及关注个人信息安全、计算机安全技术并想了解技术内幕的读者阅读。