随意输入一个字符串,将该字符串进行16位加密,并输出加密后的结果。
#include <stdio.h>
#include <string.h>
#define SIZE 100
//打印函数
void printfA(int pwd[],int len)
{
int i;
for(i = 0;i < len;i++)
{
printf("%d",pwd[i]);
}
printf("\n");
}
//用递归将x的各个位相加,直到其为个位数
int r_adding(int x)
{
int k = 0;
while(x / 10 > 0)
{
k += x % 10;
x /= 10;
}
k += x; //k保存各个位相加之和
if(k / 10 == 0)
return k;
else
k = r_adding(k);
}
//将密码的各个位相加
void adding(int pwd[],int len)
{
int i;
for(i = 0;i < len;i++)
pwd[i] = r_adding(pwd[i]);
printfA(pwd,16);
}
//将字符串以16为的形式排列并相加
void encrypt(char *str,int k)
{
int pwd[16] = {0};
int i,j;
for(i = 0;i < 16;i++)
{
int tmp = i;
for(j = 0;j < k;j++)
{
pwd[i] += (int)str[tmp];
tmp += 16;
}
}
//printf("原始码为:\n");
//printfA(pwd,16);
printf("加密后为:\n");
adding(pwd,16);
}
int main()
{
char str[SIZE] = {0};
printf("请输入一个字符串:\n");
scanf("%s",str);
int k = strlen(str)/16 + 1;
encrypt(str,k);
return 0;
}