求解释一个加密算法

野生散养程序猿 2016-08-04 11:49:34
#define SERVER_TO_CLIENT_KEY "sever_to_client_key"
#define CLIENT_TO_SERVER_KEY "client_to_sever_key"

static void encrypt (char* data, int len, const char* key, int begin_pos)
{
if( NULL == data || NULL == key || len <= 0)
{
return;
}
char* p_buff = data;
const char* p_key = key;
intt KeyLen = int(strlen(p_key));
for (int i = 0; i < (len); ++i)
{
*p_buff ^= p_key[(i+begin_pos)%KeyLen];
p_buff++;
}
}


这种加密模式的原理是什么,怎么解释呢?我知道用到了异或。。。
...全文
158 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
[quote=引用 4 楼 zjq9931 的回复:] 这个加密算法,就是将Key的每个字节循环和数据的每个自己异或。 属于对称加密。 加密和解密算法相同。 加密秘钥和解密秘钥相同。 效果基本上和替换加密一样,比较容易破解。
你试试将你说的这段话复制粘贴到一个文本文件中,然后用我3楼的代码加密,再将结果交给任何一个号称很会破解的牛人或组织让他/他们试试破解之,看有多容易?[/quote]` 首先,我说的是楼主的算法代码。。。 其次,根据我的分析,楼主代码的加密算法,比你写的那段安全性更高一些。 再次,加密算法的要求是算法公开,秘钥保密。您的加密算法可以公开个破解的人吗?您的加密算法里面,秘钥和算法都公开了,还有什么秘密可言?您的加密算法公开后,破解加密数据,是很快的。。。 说实在的,大约在06年的时候,我破解过一些加密资料。。。用的就是和您代码里面类似的方法。。。。。
赵4老师 2016-08-06
  • 打赏
  • 举报
回复
窃取私钥就一定比窃取算法难吗?
赵4老师 2016-08-06
  • 打赏
  • 举报
回复
有时候,容不容易破解不是理论决定而是实践决定。
mLee79 2016-08-05
  • 打赏
  • 举报
回复
两次异或同一个数就还原了啊, 这要啥原理... 如果 key 的长度比 data 长, 并且只用一次, 还足够的随机, 并且有足够安全的信道传递 key 的话, 就像米国跟苏联有次加密就是这样子一遍派对特工押运密钥的话, 这就是理论上最安全的一次一秒... 如果 key 就你上面 define 的那么短点的话, 就是最最最古典的替换加密, 应该不能叫秒破, 得叫微秒破....
paschen 版主 2016-08-05
  • 打赏
  • 举报
回复
就是使用异或进行加密,解密也比较容易,只用再异或一次就回来了
赵4老师 2016-08-05
  • 打赏
  • 举报
回复
引用 4 楼 zjq9931 的回复:
这个加密算法,就是将Key的每个字节循环和数据的每个自己异或。 属于对称加密。 加密和解密算法相同。 加密秘钥和解密秘钥相同。 效果基本上和替换加密一样,比较容易破解。
你试试将你说的这段话复制粘贴到一个文本文件中,然后用我3楼的代码加密,再将结果交给任何一个号称很会破解的牛人或组织让他/他们试试破解之,看有多容易?
IT_拖油瓶 2016-08-05
  • 打赏
  • 举报
回复
这是qq的数据解密吧
  • 打赏
  • 举报
回复
这个加密算法,就是将Key的每个字节循环和数据的每个自己异或。 属于对称加密。 加密和解密算法相同。 加密秘钥和解密秘钥相同。 效果基本上和替换加密一样,比较容易破解。
赵4老师 2016-08-05
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
int i;
int main(int argc,char **argv) {
    if (argc<3) {
        printf("Usage:%s src des\n",argv[0]);
        return 1;
    }
    if (0==stricmp(argv[1],argv[2])) {
        printf("Src and des is same!\n");
        return 2;
    }
    fo=fopen(argv[2],"wb");
    if (NULL==fo) {
        printf("Can not create file %s\n",argv[2]);
        return 3;
    }
    fi=fopen(argv[1],"rb");
    if (NULL==fi) {
        fclose(fo);
        printf("Can not find file %s\n",argv[1]);
        return 4;
    }
    i=0;
    fseek(fi,-1L,SEEK_END);
    while (1) {
        fputc(fgetc(fi)^0x5A,fo);
        i++;
        if (i%1000000==0) cprintf("\r%dKB",i/1000);
        if (fseek(fi,-2,SEEK_CUR)) break;
    }
    fclose(fi);
    fclose(fo);
    cprintf("\r%dKB OK.\r\n",i/1000);
    return 0;
}
区块链起源于比特币,2008年11月1日,一位自称中本聪(Satoshi Nakamoto)的人发表了《比特币:一种点对点的电子现金系统》一文 4  ,阐述了基于P2P网络技术、加密技术、时间戳技术、区块链技术等的电子现金系统的构架理念,这标志着比特币的诞生。两个月后理论步入实践,2009年1月3日第一个序号为0的创世区块诞生。几天后2009年1月9日出现序号为1的区块,并与序号为0的创世区块相连接形成了链,标志着区块链的诞生 5  。近年来,世界对比特币的态度起起落落,但作为比特币底层技术之一的区块链技术日益受到重视。在比特币形成过程中,区块是一个一个的存储单元,记录了一定时间内各个区块节点全部的交流信息。各个区块之间通过随机散列(也称哈希算法)实现链接,后一个区块包含前一个区块的哈希值,随着信息交流的扩大,一个区块与一个区块相继接续,形成的结果就叫区块链 6  。什么是区块链?从科技层面来看,区块链涉及数学、密码学、互联网和计算机编程等很多科学技术问题。从应用视角来看,简单来说,区块链是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。这些特点保证了区块链的“诚实”与“透明”,为区块链创造信任奠定基础。而区块链丰富的应用场景,基本上都基于区块链能够解决信息不对称问题,实现多个主体之间的协作信任与一致行动 7  。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块 8  。比特币白皮书英文原版 4  其实并未出现 blockchain 一词,而是使用的 chain of blocks。最早的比特币白皮书中文翻译版 9  中,将 chain of blocks 翻译成了区块链。这是“区块链”这一中文词最早的出现时间。国家互联网信息办公室2019年1月10日发布《区块链信息服务管理规定》,自2019年2月15日起施行 1  。作为核心技术自主创新的重要突破口,区块链的安全风险问题被视为当前制约行业健康发展的一大短板,频频发生的安全事件为业界敲响警钟。拥抱区块链,需要加快探索建立适应区块链技术机制的安全保障体系。 102008年由中本聪第一次提出了区块链的概念 4  ,在随后的几年中,区块链成为了电子货币比特币的核心组成部分:作为所有交易的公共账簿。通过利用点对点网络和分布式时间戳服务器,区块链数据库能够进行自主管理。为比特币而发明的区块链使它成为第一个解决重复消费问题的数字货币。比特币的设计已经成为其他应用程序的灵感来源。2014年,区块链2.0”成为一个关于去中心化区块链数据库的术语。对这个第二代可编程区块链,经济学家们认为它是一种编程语言,可以允许用户写出更精密和智能的协议 11  。因此,当利润达到一定程度的时候,就能够从完成的货运订单或者共享证书的分红中获得收益。区块链2.0技术跳过了交易和“价值交换中担任金钱和信息仲裁的中介机构”。它们被用来使人们远离全球化经济,使隐私得到保护,使人们“将掌握的信息兑换成货币”,并且有能力保证知识产权的所有者得到收益。第二代区块链技术使存储个人的“永久数字ID和形象”成为可能,并且对“潜在的社会财富分配”不平等提供解决方案 12  。2016年1月20日,中国人民银行数字货币研讨会宣布对数字货币研究取得阶段性成果。会议肯定了数字货币在降低传统货币发行等方面的价值,并表示央行在探索发行数字货币。中国人民银行数字货币研讨会的表达大大增强了数字货币行业信心。这是继2013年12月5日央行五部委发布关于防范比特币风险的通知之后,第一次对数字货币表示明确的态度。 13 2016年12月20日,数字货币联盟——中国FinTech数字货币联盟及FinTech研究院正式筹建 14  。如今,比特币仍是数字货币的绝对主流,数字货币呈现了百花齐放的状态,常见的有bitcoin、litecoin、dogecoin、dashcoin,除了货币的应用之外,还有各种衍生应用,如以太坊Ethereum、Asch等底层应用开发平台以及NXT,SIA,比特股,MaidSafe,Ripple等行业应用 15  。公有区块链公有区块链(Public Block Chains)是指:世界上任何个体或者团体都可以发送交易,且交易能够获得该区块链的有效确认,任何人都可以参与其共识过程。公有区块链是最早的区块链,也是应用最广泛的区块链,各大bitcoins系列的虚拟数字货币均基于公有区块链,世界上有且仅有一条该币种对应的区块链 16  。联合(行业)区块链行业区块链(C

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧