c連接字元串加密
恰巧這兩天剛看的一種思路,很簡單的加密解密演算法,我說一下吧。
演算法原理很簡單,假設你的原密碼是A,用A與數B按位異或後得到C,C就是加密後的密碼,用C再與數B按位異或後能得回A。即(A異或B)異或B=A。用C實現很簡單的。這就相當於,你用原密碼A和特定數字B產生加密密碼C,別人拿到這個加密的密碼C,如果不知道特定的數字B,他是無法解密得到原密碼A的。對於密碼是數字的情況可以用下面的代碼:
#includestdio.h#defineBIRTHDAY19880314intmain(){longa,b;scanf(%ld,a)
;printf(原密碼:%ld\n,a);b=BIRTHDAY;a^=b;printf(加密密碼:%ld\n,a);a^=b;printf(解密密碼:%ld\n,a);return0;
}如果密碼是字元串的話,最簡單的加密演算法就是對每個字元重新映射,只要加密解密雙方共同遵守同一個映射規則就行啦。
2. 利用C語言給文字加密,急~
這裡面用到的大部分都是對字元串的基本操作。譚浩強C語言書上都能找到的。裡面我都有注釋了。有什麼疑問再說
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int key[3][3]={6,24,1 , //密鑰
13,16,10 ,
20,17,15 ,};
int prech(char a[],char b[][3]) //預處理,返回明文的組數
{
int i=0,j=0;
for (; *a!='\0'; ++a)
if (isalpha(*a)) //isalpha判斷是否為字母
{
b[i][j]=tolower(*a)-'a'; //b[][]存放每一組明文,3個字母為一組。tolower函數是把大寫變小寫,並-a使之變成對應的數字
++j;
if (j==3)
{
j=0;
++i;
}
}
while(j!=3 && j!=0) //後面不夠的用a補齊
{
b[i][j]=0;
j++;
}
return i;
}
void solve(char b[][3],int n) //求密文
{
int i,j;
char c[3];
for(i=0;i<n;i++)
{
for(j=0;j<3;j++) //算出b[i]組的值存放到c數組中
{
c[j]=(b[i][0]*key[j][0]+b[i][1]*key[j][1]+b[i][2]*key[j][2])%26+'A';
}
for(j=0;j<3;j++)
b[i][j]=c[j]; //把c數組的內容還給b[i]組
}
return ;
}
int main(void)
{
int len,i,j;
char s[100]; //明文
char b[40][3]; //3個為一組,存放每一組的字母對應的數字
scanf("%s",s);
len=prech(s,b);
solve(b,len);
for(i=0;i<len;i++)
for(j=0;j<3;j++)
printf("%c",b[i][j]);
printf("\n");
return 0;
}
3. c語言實現密碼加密
unsignedchar*encrypt(unsignedchar*psw,intenc){
intsum=0,i;
if(enc){
for(i=0;i<6;i++){
psw[i]-=15;
sum+=psw[i];
}
psw[6]=(unsignedchar)sum;
psw[7]=0;
}
else{
for(i=0;i<6;i++){
sum+=psw[i];
psw[i]+=15;
}
if((unsignedchar)sum!=psw[6]){
printf("Badpassword ");
psw[0]=0;
returnpsw;
}
else{
psw[6]=0;
}
}
for(i=0;i<3;i++){
unsignedchart=psw[i];
psw[i]=psw[5-i];
psw[5-i]=t;
}
returnpsw;
}
intmain()
{
unsignedcharpsw[128];
scanf("%s",psw);
printf("encodeto:%s ",encrypt(psw,1));
printf("decodeto:%s ",encrypt(psw,0));
return0;
}
4. c語言編寫字元串加密函數 不要寫得太難啊
#include<stdio.h>
#include<ctype.h>
char*encrypt(char*text){
charc;
char*p=text;
for(;*text;++text){
c=*text;
if(isdigit(c))
*text='0'+'9'-c;
elseif(islower(c)){
c=c+3;
if(c>'z')
c=c-26;
*text=c;
}elseif(isupper(c)){
c=c+3;
if(c>'Z')
c=c-26;
*text=c;
}
}
returnp;
}
intmain(){
chartext[100];
printf("輸入明文:");
scanf("%s",text);
printf("密文:%s ",encrypt(text));
getchar();
}