一次性密码本问题,请各位大佬帮帮忙,想知道为什么会有两个错误,应该怎么解决?
#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>//字节转换成8比特字符串int...
#include <stdio.h>#include <stdlib.h>#include<time.h>#include<string.h>//字节转换成8比特字符串int ByteToBit(char ch, char bit[8]) { for (int cnt = 0; cnt < 8; cnt++) { bit[cnt] = (ch >> cnt) & 1;//将ch的二进制值保存在bit数组 } //比如我们求一个十进制数的二进制,不停除以2 return 0;}char GenerateRandom() { return rand() % 2;}//产生一次性密钥void GenerateKey(char *p, int len) { srand(time(0)); for (int i = 0; i < len; i++) { p[i] = GenerateRandom(); printf("%d",p[i]); } printf("\n");}//异或操作,将结果保存在p里面void XOR(char *p, char *q, int len) { printf("========================================================\n"); for (int i = 0; i < len; i++) { p[i] = p[i] ^ q[i]; printf("%d",p[i]); } printf("\n");}//字节转换成8比特字符串int ByteToBit(char ch, char bit[8]) { for (int cnt = 0; cnt < 8; cnt++) { bit[7 - cnt] = (ch >> cnt) & 1;//将ch的二进制值保存在bit数组 } return 0;}void OneTimeAlgorithm() { int index = -1; while (index != 0) { char plain[100] = {0x0}; printf("请输入需要加密的明文:"); gets(plain);//存放明文 int len = strlen(plain);//获取实际明文长度 int bitlen = sizeof(char) * 8 * len;//二进制字符串长度 char *p = (char *) malloc(bitlen); char *key = (char *) malloc(bitlen); for (int i = 0; i < len; i++) { ByteToBit(plain[i], p + i * 8); } for(int i=0;i<bitlen;i++){ printf("%d",p[i]); } printf("\n"); GenerateKey(key,bitlen); XOR(p,key,bitlen); }}
展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询