❶ 用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;
}
❷ 簡單的C語言加密程序
#include<stdio.h>
#include<stdlib.h>
main()
{
int key;
char ch;
printf("\n請輸入密鑰:");
scanf("%d",&key);
printf("得到對應明文如下:");
while((ch=getchar())!='\r')
(ch+key)>122?putchar(ch-122+33+key):
((ch+key)<33?putchar(ch+122+key):putchar(ch+key));
}
輸入輸出如下:
請輸入密鑰:20addse
得到對應明文如下:uxx.y
你先輸入一個任意的整數,如20,然後在鍵盤上輸入一段任意的字元如addse
按回車鍵結束,就會得到結果 如:uxx.y
下面是另一組輸入輸出:
請輸入密鑰:35asjRYIRER!@#$^^*&
得到對應明文如下:+=4u#luhuDcFG((MI-
具體是如何加密,你應該能看懂,就是用一個三目運算符 ? :控制。
❸ 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);
}
}
❹ 加密演算法實現代碼
這個是界面效果,我不是用C++寫的,是用C#寫的可以參考下:
實現的代碼如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Collections;
usingSystem.IO;
usingSystem.Security.Cryptography;
usingSystem.Security;
namespaceKey
{
publicpartialclassfrmKey:Form
{
privatestringkey;//默認密鑰"yupengcheng"
privatebyte[]sKey;
privatebyte[]sIV;
publicfrmKey()
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
button4.Enabled=false;
}
///<summary>
///選擇輸入路徑
///</summary>
privatevoidbutton1_Click(objectsender,EventArgse)
{
//openFileDialog1.Filter="所有文件(*.*)|*.*";
openFileDialog1.ShowDialog();
stringfilename=openFileDialog1.FileName;
inti=filename.LastIndexOf(".");
if(i!=-1)
{
stringfiletype=filename.Substring(filename.LastIndexOf("."));
if(this.radioButton1.Checked)
{
filename=filename.Replace("(解密文件)","");
textBox2.Text=filename.Substring(0,filename.LastIndexOf("."))+"(加密文件)"+filetype;
}
else
{
filename=filename.Replace("(加密文件)","");
textBox2.Text=filename.Substring(0,filename.LastIndexOf("."))+"(解密文件)"+filetype;
}
}
if(filename!="")
{
textBox1.Text=openFileDialog1.FileName;
}
}
///<summary>
///選擇輸出路徑
///</summary>
privatevoidbutton4_Click(objectsender,EventArgse)
{
this.saveFileDialog1.ShowDialog();
if(saveFileDialog1.FileName!="")
{
this.textBox2.Text=saveFileDialog1.FileName;
}
}
///<summary>
///加密radioButton
///</summary>
privatevoidradioButton1_CheckedChanged(objectsender,EventArgse)
{
button3.Text="開始加密";
}
///<summary>
///解密radioButton
///</summary>
privatevoidradioButton2_CheckedChanged(objectsender,EventArgse)
{
button3.Text="開始解密";
}
///<summary>
///明密/暗密
///</summary>
privatevoidbutton2_Click(objectsender,EventArgse)
{
if(button2.Text=="明密")
{
textBox3.PasswordChar=Convert.ToChar(0);
button2.Text="暗密";
}
else
{
textBox3.PasswordChar=char.Parse("*");
button2.Text="明密";
}
}
///<summary>
///開始加密/開始解密
///</summary>
privatevoidbutton3_Click(objectsender,EventArgse)
{
if(this.textBox1.Text==""||this.textBox2.Text=="")
{
MessageBox.Show("文件路徑不能為空!","警告提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
if(textBox3.Text!="yupengcheng")
{
MessageBox.Show("輸入的密碼不正確,請重新輸入!","錯誤提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
textBox3.Text="";
return;
}
else
{
key="yupengcheng";
if(button3.Text=="開始加密")
{
statusBar1.Visible=true;
statusBar1.Text="正在加密文件,請等待.....";
if(EncryptFile(this.textBox1.Text,this.textBox2.Text,textBox3.Text))
{
statusBar1.Text="加密完成。";
MessageBox.Show("文件加密成功!","成功提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
statusBar1.Visible=false;
}
else
{
statusBar1.Visible=true;
statusBar1.Text="正在解密文件,請等待.....";
if(DecryptFile(this.textBox1.Text,this.textBox2.Text,textBox3.Text))
{
statusBar1.Text="解密完成。";
MessageBox.Show("文件解密成功!","成功提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
statusBar1.Visible=false;
}
}
}
///<summary>
///取消
///</summary>
privatevoidbutton5_Click(objectsender,EventArgse)
{
Application.Exit();
}
///<summary>
///加密方法
///</summary>
///<paramname="filePath">加密輸入路徑</param>
///<paramname="savePath">加密輸出路徑</param>
///<paramname="keyStr">密匙</param>
///<returns></returns>
publicboolEncryptFile(stringfilePath,stringsavePath,stringkeyStr)
{
DESCryptoServiceProviderdes=newDESCryptoServiceProvider();
if(keyStr=="")
keyStr=key;
try
{
FileStreamfs=File.OpenRead(filePath);
byte[]inputByteArray=newbyte[fs.Length];
fs.Read(inputByteArray,0,(int)fs.Length);
fs.Close();
byte[]keyByteArray=Encoding.Default.GetBytes(keyStr);
SHA1ha=newSHA1Managed();
byte[]hb=ha.ComputeHash(keyByteArray);
sKey=newbyte[8];
sIV=newbyte[8];
for(inti=0;i<8;i++)
sKey[i]=hb[i];
for(inti=8;i<16;i++)
sIV[i-8]=hb[i];
des.Key=sKey;
des.IV=sIV;
MemoryStreamms=newMemoryStream();
CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray,0,inputByteArray.Length);
cs.FlushFinalBlock();
fs=File.OpenWrite(savePath);
foreach(bytebinms.ToArray())
{
fs.WriteByte(b);
}
fs.Close();
cs.Close();
ms.Close();
returntrue;
}
catch
{
MessageBox.Show("找不到指定的文件,請重新輸入!","警告提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
returnfalse;
}
}
///<summary>
///解密方法
///</summary>
///<paramname="filePath">解密輸入路徑</param>
///<paramname="savePath">解密輸出路徑</param>
///<paramname="keyStr">密匙</param>
///<returns></returns>
publicboolDecryptFile(stringfilePath,stringsavePath,stringkeyStr)
{
DESCryptoServiceProviderdes=newDESCryptoServiceProvider();
if(keyStr=="")
keyStr=key;
try
{
FileStreamfs=File.OpenRead(filePath);
byte[]inputByteArray=newbyte[fs.Length];
fs.Read(inputByteArray,0,(int)fs.Length);
fs.Close();
byte[]keyByteArray=Encoding.Default.GetBytes(keyStr);
SHA1ha=newSHA1Managed();
byte[]hb=ha.ComputeHash(keyByteArray);
sKey=newbyte[8];
sIV=newbyte[8];
for(inti=0;i<8;i++)
sKey[i]=hb[i];
for(inti=8;i<16;i++)
sIV[i-8]=hb[i];
des.Key=sKey;
des.IV=sIV;
MemoryStreamms=newMemoryStream();
CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray,0,inputByteArray.Length);
cs.FlushFinalBlock();
fs=File.OpenWrite(savePath);
foreach(bytebinms.ToArray())
{
fs.WriteByte(b);
}
fs.Close();
cs.Close();
ms.Close();
returntrue;
}
catch
{
MessageBox.Show("找不到指定的文件,請重新輸入!","警告提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
returnfalse;
}
}
privatevoidtextBox1_TextChanged(objectsender,EventArgse)
{
if(textBox1.Text==""||textBox1.Text==null)
{
button4.Enabled=false;
}
else
{
button4.Enabled=true;
}
}
}
}
❺ 求python RSA 演算法加密字元串的完整源代碼。
import rsa rsaPublickey = int(pubkey, 16) key = rsa.PublicKey(rsaPublickey, 65537) #創建公鑰 message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) #拼接明文js加密文件中得到 passwd = rsa.encrypt(message, key) #加密 passwd = binascii.b2a_hex(passwd) #將加密信息轉換為16進制。 return passwd
❻ java加密解密代碼
package com.cube.limail.util;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;/**
* 加密解密類
*/
public class Eryptogram
{
private static String Algorithm ="DES";
private String key="CB7A92E3D3491964";
//定義 加密演算法,可用 DES,DESede,Blowfish
static boolean debug = false ;
/**
* 構造子註解.
*/
public Eryptogram ()
{
} /**
* 生成密鑰
* @return byte[] 返回生成的密鑰
* @throws exception 扔出異常.
*/
public static byte [] getSecretKey () throws Exception
{
KeyGenerator keygen = KeyGenerator.getInstance (Algorithm );
SecretKey deskey = keygen.generateKey ();
System.out.println ("生成密鑰:"+bytesToHexString (deskey.getEncoded ()));
if (debug ) System.out.println ("生成密鑰:"+bytesToHexString (deskey.getEncoded ()));
return deskey.getEncoded ();
} /**
* 將指定的數據根據提供的密鑰進行加密
* @param input 需要加密的數據
* @param key 密鑰
* @return byte[] 加密後的數據
* @throws Exception
*/
public static byte [] encryptData (byte [] input ,byte [] key ) throws Exception
{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec (key ,Algorithm );
if (debug )
{
System.out.println ("加密前的二進串:"+byte2hex (input ));
System.out.println ("加密前的字元串:"+new String (input ));
} Cipher c1 = Cipher.getInstance (Algorithm );
c1.init (Cipher.ENCRYPT_MODE ,deskey );
byte [] cipherByte =c1.doFinal (input );
if (debug ) System.out.println ("加密後的二進串:"+byte2hex (cipherByte ));
return cipherByte ;
} /**
* 將給定的已加密的數據通過指定的密鑰進行解密
* @param input 待解密的數據
* @param key 密鑰
* @return byte[] 解密後的數據
* @throws Exception
*/
public static byte [] decryptData (byte [] input ,byte [] key ) throws Exception
{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec (key ,Algorithm );
if (debug ) System.out.println ("解密前的信息:"+byte2hex (input ));
Cipher c1 = Cipher.getInstance (Algorithm );
c1.init (Cipher.DECRYPT_MODE ,deskey );
byte [] clearByte =c1.doFinal (input );
if (debug )
{
System.out.println ("解密後的二進串:"+byte2hex (clearByte ));
System.out.println ("解密後的字元串:"+(new String (clearByte )));
} return clearByte ;
} /**
* 位元組碼轉換成16進制字元串
* @param byte[] b 輸入要轉換的位元組碼
* @return String 返回轉換後的16進制字元串
*/
public static String byte2hex (byte [] b )
{
String hs ="";
String stmp ="";
for (int n =0 ;n <b.length ;n ++)
{
stmp =(java.lang.Integer.toHexString (b [n ] & 0XFF ));
if (stmp.length ()==1 ) hs =hs +"0"+stmp ;
else hs =hs +stmp ;
if (n <b.length -1 ) hs =hs +":";
} return hs.toUpperCase ();
}
/**
* 字元串轉成位元組數組.
* @param hex 要轉化的字元串.
* @return byte[] 返回轉化後的字元串.
*/
public static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] achar = hex.toCharArray();
for (int i = 0; i < len; i++) {
int pos = i * 2;
result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
}
return result;
}
private static byte toByte(char c) {
byte b = (byte) "0123456789ABCDEF".indexOf(c);
return b;
}
/**
* 位元組數組轉成字元串.
* @param String 要轉化的字元串.
* @return 返回轉化後的位元組數組.
*/
public static final String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(bArray.length);
String sTemp;
for (int i = 0; i < bArray.length; i++) {
sTemp = Integer.toHexString(0xFF & bArray[i]);
if (sTemp.length() < 2)
sb.append(0);
sb.append(sTemp.toUpperCase());
}
return sb.toString();
}
/**
* 從資料庫中獲取密鑰.
* @param deptid 企業id.
* @return 要返回的位元組數組.
* @throws Exception 可能拋出的異常.
*/
public static byte[] getSecretKey(long deptid) throws Exception {
byte[] key=null;
String value=null;
//CommDao =new CommDao();
// List list=.getRecordList("from Key k where k.deptid="+deptid);
//if(list.size()>0){
//value=((com.csc.sale.bean.Key)list.get(0)).getKey();
value = "CB7A92E3D3491964";
key=hexStringToByte(value);
//}
if (debug)
System.out.println("密鑰:" + value);
return key;
}
public String encryptData2(String data) {
String en = null;
try {
byte[] key=hexStringToByte(this.key);
en = bytesToHexString(encryptData(data.getBytes(),key));
} catch (Exception e) {
e.printStackTrace();
}
return en;
}
public String decryptData2(String data) {
String de = null;
try {
byte[] key=hexStringToByte(this.key);
de = new String(decryptData(hexStringToByte(data),key));
} catch (Exception e) {
e.printStackTrace();
}
return de;
}
} 加密使用: byte[] key=Eryptogram.getSecretKey(deptid); //獲得鑰匙(位元組數組)
byte[] tmp=Eryptogram.encryptData(password.getBytes(), key); //傳入密碼和鑰匙,獲得加密後的位元組數組的密碼
password=Eryptogram.bytesToHexString(tmp); //將位元組數組轉化為字元串,獲得加密後的字元串密碼解密與之差不多
❼ 初學者,求高手給一個完整的AES加密解密演算法的程序(C/C++) 希望能滿足如下要求
/*128bits密鑰長度及分組長度AES加解密代碼
*作者:Jeffrey.zhu
*/