#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);
}
}
uj5u.com熱心網友回復:
1.bytestobit 這個函式你定義了兩遍2.你嵌套的for回圈,都用i作為回圈變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/78812.html
標籤:C++ 語言
上一篇:函式回傳值
下一篇:c++
