當前位置:首頁 » 密碼管理 » vc字元加密解密

vc字元加密解密

發布時間: 2023-12-17 17:23:34

㈠ VC 簡單加密

#include <stdio.h>
#include <string.h>void main()
{
char a[50] = "加密~!中英文都要支持!越簡單越好!";//原文
char b[50];
char key[5] = "abcd\0";//密鑰
int i, j; printf("原文:%s\n\n", a);
printf("密鑰:%s\n\n", key); for (i = 0; i < strlen(a); i ++)
{
for (j = 0; j < 4; j ++)
{
b[i] = a[i] ^ key[j];//將每一個原文字元跟密鑰字元異或
}
}
b[i] = 0;//結束字元串

printf("加密後:%s\n\n", b); for (i = 0; i < strlen(a); i ++)
{
for (j = 3; j >= 0; j --)
{
b[i] = b[i] ^ key[j];
}
}
printf("解密後:%s\n\n", a);
}

㈡ 用c語言編寫一個對稱加密演算法,對字元串加密

/*本問題的關鍵是如何交換ASCII的二進制位,下面提供簡短演算法,並附上VC++6.0環境下的運行結果截圖。

*/

#include<stdio.h>

charswapbit(charc){

chari,num=0,ch[8];

for(i=0;i<8;i++){

ch[i]=c&1;

c=(c>>1);

}

for(i=0;i<8;i++){

num=2*num+ch[i];

}

returnnum;

}

intmain(){

charch;

for(ch='A';ch<='Z';ch++){

printf("%c=%X:%X ",ch,ch,0XFF&swapbit(ch));

}

return0;

}

㈢ c語言文件加密和解密

c語言文件加密和解密方法如下:

1、首先打開VC++6.0;

voidDecryptFile(FILE*sfp,FILE*dfp,charpwd)
{
charch;
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=ch^pwd;
ch=(ch-'a'+25)%26+'a';
}
if((ch>='A')&&(ch<='Z'))
{
ch=ch^pwd;
ch=(ch-'A'+25)%26+'A';
}
fputc(ch,dfp);
}
}

輸出函數,輸出文件內容
voidOutputFile(FILE*fp)
{
charch;
while((ch=fgetc(fp))!=EOF)
putchar(ch);
}
主函數,主要調用這幾個函數
intmain()
{
/*用戶輸入的要加密的文件名*/
charsfilename[20];
/*用戶輸入加密後保存的文件名*/
chardfilename[20];
/*用來保存密碼字元*/
charpwd;
FILE*sfp,*dfp;

printf(": ");
/*得到要加密的文件名*/
gets(sfilename);
/*得到加密後你要的文件名*/
printf(": ");
gets(dfilename);
/*得到加密字元*/
printf("PleaseinputyourPassword: ");
//scanf("%c",&pwd);
pwd=getch();
/*屏幕以*來表示輸入的加密字元*/
printf("* ");
/*以只讀方式打開要加密的文件*/
if((sfp=fopen(sfilename,"r"))==0)
{
printf("Can'topenthefile:%s ",sfilename);
exit(0);
}
/*輸出要加密的文件*/
printf(": ");
OutputFile(sfp);
/*建立加密後的文件*/
if((dfp=fopen(dfilename,"w+"))==0)
{
printf("Can'topenorcreatethefile:%s ",dfilename);
//exit(0);
}
/*文件加密*/
fseek(sfp,0L,SEEK_SET);
EncryptFile(sfp,dfp,pwd);
printf(" Encryptedthefilesuccessfully! ");
/*輸出加密後的文件*/
printf(": ");
fseek(dfp,0L,SEEK_SET);
OutputFile(dfp);
fclose(sfp);
fclose(dfp);
getch();
return0;
}


㈣ VC 如何加密解密 ini 文本文檔

C++加密解密函數及用法示例

// 常量
#define C1 52845
#define C2 22719

CString Encrypt(CString S, WORD Key) // 加密函數
{
CString Result,str;
int i,j;

Result=S; // 初始化結果字元串
for(i=0; i<S.GetLength(); i++) // 依次對字元串中各字元進行操作
{
Result.SetAt(i, S.GetAt(i)^(Key>>8)); // 將密鑰移位後與字元異或
Key = ((BYTE)Result.GetAt(i)+Key)*C1+C2; // 產生下一個密鑰
}
S=Result; // 保存結果
Result.Empty(); // 清除結果
for(i=0; i<S.GetLength(); i++) // 對加密結果進清賀行轉換
{
j=(BYTE)S.GetAt(i); // 提取字元
// 將字元轉換為兩個字母保存
str="12"; // 設置str長度為2
str.SetAt(0, 65+j/26);//這里將65改大點的數例如256,密文就會變亂碼,效果更好,相應的,解密處要改為相同的數
str.SetAt(1, 65+j%26);
Result += str;
}
return Result;
}

CString Decrypt(CString S, WORD Key) // 解密函數
{
CString Result,str;
int i,j;

Result.Empty(); // 清除結果
for(i=0; i < S.GetLength()/2; i++) // 將字元串兩個字母一組進行處理
{
j = ((BYTE)S.GetAt(2*i)-65)*26;);//相應的,解密處要改為相同的數

j += (BYTE)S.GetAt(2*i+1)-65;
str="1"; // 設置str長度為1
str.SetAt(0, j);
Result+=str; // 追加字元,還原字元串
}
S=Result; // 保存中間結果
for(i=0; i<S.GetLength(); i++) // 依次對字元串中各字元進行操作
{
Result.SetAt(i, (BYTE)S.GetAt(i)^(Key>>8)); // 將密鑰移位後與字元異或
Key = ((BYTE)S.GetAt(i)+Key)*C1+C2; // 產生下一個密鑰
}
return Result;
}

用法

CString text=_T("192.168.18.14");//需要加密的字元串
WORD key=1314;//答閉派key
CString jiami=Encrypt(text,key);//加密
AfxMessageBox(_T("密文:")+jiami);
CString jiemi=Decrypt(jiami,key);//解態悶密
AfxMessageBox(_T("原文:")+jiemi);

㈤ VC++ RC4,加密解密, 使用問題

#include "rc4.h"

void main()
{
char key[]="abcd";
RC4_KEY stKey;
BYTE d1[4]={0x11,0x22,0x33,0x44};

//加密
RC4Init(key,strlen(key),&stKey);
RC4Works(d1,4,&stKey);

//解密
RC4Init(key,strlen(key),&stKey);
RC4Works(d1,4,&stKey);
}

㈥ 使用高級語言(C、C++、C#語言)實現一個加密/解密程序,調試並通過該程序。

同意一樓的看法,要不你就要赫夫曼編碼原理吧,這個比較簡單,實現也比較容易;根據字元出現的頻率作為字元權值,利用Huffman演算法進行處理,形成Huffman樹,得到Huffman碼,利用Huffman碼對字元進行加密,已二進制的形式存儲到磁碟。 再利用Huffman碼對加密後的文件解密。

#include<stdio.h>

typedef struct LNode{ /*-------------鏈表-------------------*/

int data;

struct LNode *next;

}LNode,*Linklist;

typedef struct Character{ /*-------------字元結構體-------------*/

char data; /*--------------字元值----------------*/

int frequency; /*-------------字元出現頻率-----------*/

}Character;

typedef struct HTNode{ /*-------------哈夫曼接點-------------*/

char data; /*-------------接點值-----------------*/

unsigned int weight; /*--------------權值------------------*/

unsigned int parent,lchild,rchild;

}HTNode,*HuffmanTree;

Linklist L; /*-------------鏈表頭接點--------------*/

Character T[256]; /*-----存放信息中出現的字元(不含漢字)----*/

HuffmanTree HT; /*--------------存放哈夫曼接點--------------*/

char *HC[257],*HA[256]; /*------HC中緊密存放哈夫曼編碼,HA中按字元值位置存放該字元的編碼,如A存放於HA中第65號元---*/

int len=0; /*-------------信息中出現的字元數量-----------*/

int s1,s2;

int i,j;

char ch;

char Infile[10],Outfile[10],decfile[10]; /*------分別為源信息文件,加密後的2進制文件(解密源文件),解密後的文件------*/

FILE *fp,*fin,*fout;

void Create_L(int n) /*------對有n接點建一條帶頭接點的鏈表(頭插法)-----*/

{

int i;

Linklist p,k;

L=(Linklist)malloc(sizeof(LNode));

k=L;

for(i=1;i<=n;i++)

{

p=(Linklist)malloc(sizeof(LNode));

p->next=NULL;

p->data=i;

k->next=p;k=p;

}

}

void Init() /*-------初始化,統計Infile中的字元數目len及每個字元出現的頻率------*/

{ /*-------將這len個字元存於T[0]到T[len-1]中,然後按頻率值將這len個字元按升序排列------*/

void QuickSort(Character A[],int p,int r);

printf("Input the Infilename:\n");

scanf("%s",Infile);

if((fp=fopen(Infile,"r"))==NULL)

{

printf("Cannot open Infile!\n");

exit(0);

}

for(i=0;i<256;i++)

{

T[i].data=i;

T[i].frequency=0;

}

while(!feof(fp))

{

ch=fgetc(fp);

T[ch].frequency++;

}

for(i=0,j=0;i<256;i++)

{

while(!T[i].frequency&&i<256)

T[i++].data=0;

if(i<256)

T[j++]=T[i];

}

len=j;

Create_L(len);

QuickSort(T,0,len-1);

fclose(fp);

}

void QuickSort(Character A[],int p,int r) /*--------冒泡法對A數組元素按頻率升序排列---------*/

{

Character t;

for(i=p;i<r;i++)

for(j=p;j<r-i;j++)

if(A[j].frequency>A[j+1].frequency)

{

t=A[j]; A[j]=A[j+1]; A[j+1]=t;

}

}

void Select() /*------------取出鏈表的前兩個權值最小的元素,將新增元素按升序規則插於鏈表-------*/

{

Linklist p,q;

int w,t;

p=L->next;

s1=p->data;

q=p->next;

s2=q->data;

w=HT[s1].weight+HT[s2].weight;

q->data=i;

L->next=q;

free(p);

while(q->next)

{

if(w>HT[q->next->data].weight)

{ t=q->data;q->data=q->next->data;q->next->data=t;}

q=q->next;

}

}

void HuffmanCoding(int n) /*-------對n種字元進行編碼存於*HA[257]中---------*/

{

int m,c,f,start;

int lencd;

HuffmanTree p;

char *cd;

if(n<=1) return;

m=2*n-1;

HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));

for(p=HT+1,i=1;i<=n;++i,++p)

{

p->data=T[i-1].data;

p->weight=T[i-1].frequency;

p->parent=0;

p->lchild=0;

p->rchild=0;

}

for(;i<=m;++i,++p)

{

p->data=0;

p->weight=0;

p->parent=0;

p->lchild=0;

p->rchild=0;

}

for(i=n+1;i<=m;++i)

{

Select();

HT[s1].parent=i;

HT[s2].parent=i;

HT[i].lchild=s1;

HT[i].rchild=s2;

HT[i].weight=HT[s1].weight+HT[s2].weight;

}

cd=(char *)malloc(n*sizeof(char));

for(start=0;start<n;start++) cd[i]='\0';

for(i=1;i<=n;++i)

{

start=0;

for(c=i,f=HT[i].parent;f!=0;f=HT[f].parent,c=HT[c].parent)

{

if(HT[f].lchild==c)

cd[start++]='0';

else

cd[start++]='1';

}

lencd=start;

HC[i]=(char *)malloc((lencd+1)*sizeof(char));

ch=HT[i].data;

HA[ch]=(char *)malloc((lencd+1)*sizeof(char));

for(start=lencd-1,j=0;start>=0;start--)

{

HC[i][j]=cd[start];

j++;

}

HC[i][j]='\0';

strcpy(HA[ch],HC[i]);

}

free(cd);

}

void Encrytion() /*-------按HA中的編碼把Infile文件中的每一個字元翻譯成2進制文件存於outfile文件中----*/

{

printf("Input the outfilename:\n");

scanf("%s",Outfile);

if((fout=fopen(Outfile,"a"))==NULL)

{

printf("Cannot open outfile!\n");

exit(0);

}

if((fin=fopen(Infile,"r"))==NULL)

{

printf("Cannot open Infile in the Encrytion!\n");

exit(0);

}

while(!feof(fin))

{

ch=fgetc(fin);

fputs(HA[ch],fout);

}

fclose(fin);

fclose(fout);

}

void Decryption() /*--------對存於outfile文件中的密文解碼,從哈夫曼樹的根接點按0,1分別選擇左右子樹,

直到葉子接點,輸出葉子接點值-----*/

{

int m=2*len-1;

if((fin=fopen(Outfile,"r"))==NULL)

{

printf("Cannot open sourcefile!\n");

exit(0);

}

printf("Input the decfile!\n");

scanf("%s",decfile);

if((fout=fopen(decfile,"a"))==NULL)

{

printf("Cannot open decfile!\n");

exit(0);

}

while(!feof(fin))

{

i=m;

while(HT[i].lchild&&HT[i].rchild)

{

ch=fgetc(fin);

if(ch=='0') i=HT[i].lchild;

else if(ch=='1') i=HT[i].rchild;

else

{

printf("END!\n");

exit(0);

}

}

printf("%c",HT[i].data);

fprintf(fout,"%c",HT[i].data);

}

fclose(fin);

fclose(fout);

}

/*----------------主函數----------------------*/

void main()

{

void Init(); /*---------------聲明部分-------------------*/

void HuffmanCoding(int n);

void Encrytion();

void Decryption();

Init(); /*--------------初始化函數------------------*/

HuffmanCoding(len); /*--------------編碼函數--------------------*/

Encrytion(); /*--------------加密函數--------------------*/

Decryption(); /*--------------解密函數--------------------*/

}

熱點內容
sql存儲過程區別 發布:2024-11-28 23:35:37 瀏覽:918
ms計算機需要什麼配置 發布:2024-11-28 23:34:21 瀏覽:974
淘寶直接訪問的流量 發布:2024-11-28 23:33:11 瀏覽:49
python發微博 發布:2024-11-28 23:29:31 瀏覽:725
sql清空命令 發布:2024-11-28 22:58:53 瀏覽:487
melpython 發布:2024-11-28 22:49:54 瀏覽:211
伺服器瀏覽量什麼意思 發布:2024-11-28 22:49:09 瀏覽:965
可不可以同時安裝幾個編譯器 發布:2024-11-28 22:34:08 瀏覽:935
蘋果配置鎖如何激活 發布:2024-11-28 22:10:24 瀏覽:669
linuxpython2與3共存 發布:2024-11-28 21:43:41 瀏覽:906