简单LinuxC程序关于加密(将任意长字符转换为定长整数)

来源:互联网 发布:即时通讯软件 编辑:程序博客网 时间:2024/05/22 12:49

转自 :http://blog.csdn.net/m0_38001783/article/details/77150527


本程序功能是将任意长字符串转换为定长(16位)整数,这是一个不可逆的过程,所以可以用来给数据加密。以下是我具体实现的代码。

源代码:

[cpp] view plain copy
  1. #include <stdio.h>  
  2. #include <string.h>  
  3. #define SIZE 1024  
  4. #define LEN 16  
  5.   
  6. //原始码转换函数  
  7. int add(int pwdnum)  
  8. {  
  9.     while(pwdnum >= 10)   //得到个位数的最终码  
  10.     {  
  11.         int tmp = pwdnum;  
  12.         pwdnum = 0;  
  13.         while(tmp)    //每一位数字相加  
  14.         {  
  15.             pwdnum += tmp%10;  
  16.             tmp = tmp/10;  
  17.         }  
  18.     }  
  19.     return pwdnum;    //返回最终码  
  20. }  
  21.   
  22. //分组相加函数,分16组,得到16个原始码  
  23. int encrypt(char *str,char *pwd,int len)  
  24. {  
  25.     if(str == NULL)  
  26.     {  
  27.         return -1;  
  28.     }  
  29.     int k = len/LEN + 1;  
  30.     int i,j;  
  31.     int pwdtmp[LEN] = {0};//16个原始码  
  32.     for (i = 0;i < LEN;i++)  
  33.     {  
  34.         for (j = 0;j < k;j++)  
  35.         {  
  36.             pwdtmp[i] += str[i+LEN*j];   //每组对应位置的数相加得到原始码  
  37.         }  
  38.     }  
  39.     for (i = 0;i < LEN;i++)  
  40.     {  
  41.         pwd[i] = add(pwdtmp[i]) + '0';   //将原始码转换为个位数,再转变为对应字符  
  42.     }  
  43.     return 0;  
  44. }  
  45.   
  46. int main()  
  47. {  
  48.     char str[SIZE] = {0};   //原始字符串  
  49.     char pwd[LEN+1] = {0};    //加密16位数字  
  50.     printf ("请输入一个字符串\n");  
  51.     scanf("%s",str);  
  52.     int len = strlen(str);  
  53.     encrypt(str,pwd,len);  
  54.     printf ("pwd = %s\n",pwd);  
  55.   
  56.     return 0;  
  57. }