導航:首頁 > 文檔加密 > 設計一個加密解密方案

設計一個加密解密方案

發布時間:2023-04-23 01:17:23

1. 用C語言設計一個文件加密與解密程序

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

1、首先打開VC++6.0;


4、聲明頭文件

#include<stdio.h>

#include<stdlib.h>

#include<string.h>


首先寫個加密函數,演算法就是簡介里說的;

voidEncryptFile(FILE*sfp,FILE*dfp,charpwd)
{
charch;
if(sfp==0||dfp==0)
{
printf("ERROR! ");
return;
}
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=(ch-'a'+1)%26+'a';
ch=ch^pwd;
}
if((ch>='A')&&(ch<='Z'))
{
ch=(ch-'A'+1)%26+'A';
ch=ch^pwd;
}
fputc(ch,dfp);
}
}

寫解密子函數:與加密的過程相反;

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;
}

2. 用C語言設計一個加密 解密 密碼 的程序。

// playFair 加密 你參考下 ...
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define x 50
char MiYao[x],PassWord[x],AddPass[x],Table[5][5],Map[25];
bool Visit[27]={false};
char English[27]="abcdefghijklmnopqrstuvwxyz";
void Input()
{
printf("請輸入密鑰:\t"); scanf("%s",MiYao);
printf("請輸入待加密密碼:\t"); scanf("%s",PassWord);
}
void Fun_5x5()
{
int count = 0,V =0;
/*標記密鑰內字元為: true*/
for(int i=0;MiYao[i]!='\0';i++)
if(strchr(English,MiYao[i])!=NULL)
Visit[strchr(English,MiYao[i])-English] = true;
/*執行密鑰矩陣操作 並標記已使用字元:true*/
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
{
if(count<strlen(MiYao))
Table[i][j] = MiYao[count++];
else
{
while(Visit[V] != false) V++;
Table[i][j] = English[V];
Visit[V++] = true;
}
}
puts("∞∞∞密鑰矩陣為∞∞∞");
for(int i=0;i<5;i++)
{ for(int j=0;j<5;j++)
printf("%3c",Table[i][j]);
puts("");
}
puts("∞∞∞∞∞∞∞∞∞∞∞");

}
int IsVisited(char ch)
{
return Visit[strchr(English,ch)-English]; //false 未出現過
}
void TabletoMap()
{ int count=0;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
Map[count++]=Table[i][j];
Map[count]='\0';
}
void Judge()
{
int len = strlen(PassWord),i,j,k;
memset(AddPass,0,sizeof(char));
/*一對對去字母,剩下單個字母,則不變化,直接放入加密串中.*/
if(len%2){
AddPass[len-1] = PassWord[len-1];
len -=1;
}
/*一對中 密鑰矩陣中 存在矩陣 eg.ab 先輸出a同行頂點在輸出b同行頂點*/
int row1,low1,row2,low2,a1,a2;
for(i=0;i<len;i+=2)
{
char c1,c2;
c1 = PassWord[i];
c2 = PassWord[i+1];
/*一對中 兩字母相同 無變化*/
/*一對中 有字母不在密鑰矩陣中 無變化*/
if(c1 == c2 || ( !IsVisited(c1)||!IsVisited(c2)))
{ AddPass[i] = c1;
AddPass[i+1]=c2;
}else{
a1 = strchr(Map,c1)-Map;
row1 = a1/5; low1 = a1%5;
a2 = strchr(Map,c2)-Map;
row2 = a2/5; low2 = a2%5;
/*一對中 字元出現在同行或同列 簡單swap字元*/
if(row1 == row2 || low1 == low2)
{
AddPass[i] = c2;
AddPass[i+1] = c1;
}else{
AddPass[i] = Table[row1][low2];
AddPass[i+1] = Table[row2][low1];
}
}
}AddPass[len+1]='\0';
puts("加密後字元串:");
puts(AddPass);
puts("原串是:");
puts(PassWord);
}
int main()
{
Input();
Fun_5x5();
TabletoMap();
Judge();
return 0;
}

3. c語言程序設計文件加密解密

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main()
{
void sc(char *fp,char *key,int Flen,int Klen);
FILE *fp;
char *pBuf,filename[20],key[20],ch;

printf("請輸入選擇:A、加密 B、解密 C退出\n");
ch=getchar();
while(ch!='c'&&ch!='C')
{
if(ch=='a'||ch=='A'||ch=='b'||ch=='B')
{
printf("請輸入要打開的文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{printf("無法打開文件,請注意輸入後綴!\n");<br/> exit(0);<br/> }

fseek(fp,0,SEEK_END);
int len=ftell(fp);
pBuf=new char[len+1];
rewind(fp);
fread(pBuf,1,len,fp);
pBuf[len]=0;
printf("%s\n",pBuf);
fclose(fp);

printf("請輸入加密/解密的密碼:\n");
scanf("%s",key);
sc(pBuf,key,len,strlen(key));

printf("請輸入保存加密文件的文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"wb"))==NULL)
{printf("無法保存文件,請注意磁碟是否已滿!\n");<br/> exit(0);<br/> }
else
fwrite(pBuf,1,len,fp);
fclose(fp);
printf("請輸入選擇:A、加密 B、解密 C退出\n");
}
else {
printf("輸入錯誤,請重新輸入\n");
}
ch=getchar();
ch=getchar();
}
}
void sc(char *fp,char *key,int Flen,int Klen)
{int i,j,k;<br/>for(i=0;i<Flen;i+=Klen)<br/>for(j=i,k=0;k<Klen;j++,k++)<br/>fp[j]^=key[k];<br/><br/>fp[i]='\0';<br/>printf("%s\n",fp);<br/>}

4. 用c語言設計一個簡單地加密算,解密演算法,並說明其中的原理

恰巧這兩天剛看的一種思路,很簡單的加密解密演算法,我說一下吧。
演算法原理很簡單,假設你的原密碼是A,用A與數B按位異或後得到C,C就是加密後的密碼,用C再與數B按位異或後能得回A。即(A異或B)異或B=A。用C實現很簡單的。
這就相當於,你用原密碼A和特定數字B產生加密密碼C,別人拿到這個加密的密碼C,如果不知道特定的數字B,他是無法解密得到原密碼A的。
對於密碼是數字的情況可以用下面的代碼:
#include <stdio.h>
#define BIRTHDAY 19880314
int main()
{
long a, b;

scanf("%ld", &a);
printf("原密碼:%ld\n", a);
b = BIRTHDAY;
a ^= b;
printf("加密密碼:%ld\n", a);

a ^= b; printf("解密密碼:%ld\n", a);
return 0;
}
如果密碼是字元串的話,最簡單的加密演算法就是對每個字元重新映射,只要加密解密雙方共同遵守同一個映射規則就行啦。

5. python給定一個5位數字,如12345,試設計一種加密方法,將數字加密、解密

加密 5 位數字(如 12345)的一種方法是對數字中的每個數字應用數學運算以創建一個新的加密數字。例如,您可以為每個數字加 3 以獲得 34578。要解密數字,您只需對每個數字應用反向運算(在本例中為減去螞散 3)即可悶蠢氏返回原始數字。

這些只是加密和解密 5 位數字的許多檔喚不同方法的兩個示例。您選擇的具體方法將取決於您所需的安全級別和可用的資源(例如時間、計算能力)。

回答不易望請採納

6. Android Okhttp/Retrofit網路請求加解密實現方案

比較安全的方案應該是AES+RSA的加密方式。具體如下圖所示。

為什麼要這樣做呢?
1、RSA是非對稱加密,公鑰和私鑰分開,且公鑰可以公開,很適合網路數據傳輸場景。但RSA加密比較慢,據說比AES慢100倍,且對加密的數據長度也有限制。
2、AES是對稱加密,加密速度快,安全性高,但密鑰的保存是個問題,在網路數據傳輸的場景就很容易由於密鑰泄露造成安全隱患
3、所以,AES+RSA結合才更好,AES加密數據,且密鑰隨機生成,RSA用對方(伺服器)的公鑰加密隨機生成的AES密鑰。傳輸時要把密文,加密的AES密鑰和自己的公鑰傳給對方(伺服器)。對方(伺服器)接到數據後,用自己的私鑰解密AES密鑰,再拿AES密鑰解密數據得到明文。這樣就綜合了兩種加密體系的優點。
4、除上面說的外,還可以加簽名,即對傳輸的數據(加密前)先做個哈希,然後用自己的RSA私鑰對哈希簽名(對方拿到自己的公鑰可以驗簽),這樣可以驗證傳輸內容有沒有被修改過。

java來說,加密的輸入和輸出都是位元組數組類型的,也就是二進制數據,網路傳輸或本地保存都需要重新編碼為字元串。推薦使用Base64。Android 有自帶的Base64實現,flag要選Base64.NO_WRAP,不然末尾會有換行影響服務端解碼。
Android中Base64加密

總而言之,這些不同語言都有實現庫,調用即可,關鍵是參數要一致,具體還需要和後台聯調一下。
rsa加解密的內容超長的問題解決

現在說到網路框架,應該毫無疑問是Retrofit了。上面說的加密方案說到底還是要在網路請求框架內加上,怎麼做入侵最小,怎麼做最方便才是重點。
1、坑定不能直接在介面調用層做加密,加參數,這樣每個介面都要修改,這是不可能的。
2、ConverterFactory處理,這也是網上可以搜到的很多文章的寫法,但我覺得還是有入侵。而且有點麻煩。
3、OkHttp添加攔截器,這種方法入侵最小(可以說沒有),實現呢也非常優雅。
下面的實現,網上也找不到多少可以參考的文章,但不得不說,OkHttp的封裝和設計真的很好用,所見即所得。看下源碼,就知道該怎麼用了,連文檔都不用查。

主要注意點:
0、和介面無關的新加的數據放在請求頭里。
1、該close的要close,不然會內存泄漏。
2、新舊Request和Response要區分好,新的要替換舊的去傳遞或返回。
3、要對response.code()做處理,只有在和後台約定好的返回碼下才走解密的邏輯,具體看自己的需求,不一定都是200。

7. 用JAVA設計一個簡單的加密、解密演算法,用該演算法來實現對數據的加密、解密

給你個MD5的加密演算法

package test;
import java.security.MessageDigest;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/

public class StringUtil {

private final static String[] hexDigits = {
"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "a", "b", "c", "d", "e", "f"};

/**
* 轉換位元組數組為16進制字串
* @param b 位元組數組
* @return 16進制字串
*/

public static String byteArrayToHexString(byte[] b) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}

private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}

public static String MD5Encode(String origin) {
String resultString = null;

try {
resultString=new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
resultString=byteArrayToHexString(md.digest(resultString.getBytes()));
}
catch (Exception ex) {

}
return resultString;
}

public static void main(String[] args){
System.err.println(MD5Encode("a"));
}
}

在RFC 1321中,給出了Test suite用來檢驗你的實現是否正確:

MD5 ("") =
MD5 ("a") =
MD5 ("abc") =
MD5 ("message digest") =
MD5 ("abcdefghijklmnopqrstuvwxyz") =

8. C語言設計一個簡單的加密解密程序

C語言設計一個簡單的加密解密程序如下:
加密程序代碼:
#include<stdio.h>
main()
{
char
c,filename[20];
FILE
*fp1,*fp2;
printf("請輸入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代碼:
#include<stdio.h>
#include<string.h>
main()
{
char
c,filename[20];
char
yanzhengma[20];
FILE
*fp1,*fp2;
printf("請輸入待解密文件名:\n");
scanf("%s",filename);
printf("請輸入驗證碼:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("驗證碼錯誤!請重新輸入:\n");
scanf("%s",filename);
}
}

閱讀全文

與設計一個加密解密方案相關的資料

熱點內容
我的世界如何編程 瀏覽:84
vue反編譯代碼有問題 瀏覽:948
linuxshell字元串連接字元串 瀏覽:51
androidviewpager刷新 瀏覽:438
python編程計算平均分 瀏覽:678
加密數字貨幣市值查詢 瀏覽:692
時尚商圈app怎麼樣 瀏覽:584
stacklesspython教程 瀏覽:138
用命令行禁用135埠 瀏覽:212
linux防火牆編程 瀏覽:627
pdf閱讀器刪除 瀏覽:979
考研人如何緩解壓力 瀏覽:822
買電暖壺哪個app便宜 瀏覽:505
洛克王國忘記伺服器了怎麼辦 瀏覽:782
為什麼cf登錄伺服器沒反應 瀏覽:695
伺服器如何獲取文件列表 瀏覽:673
creo五軸編程光碟 瀏覽:14
蘋果app網路驗證在哪裡 瀏覽:14
博科清空命令 瀏覽:384
簡愛英文pdf 瀏覽:376