import java.util.Scanner;
public class Caeser {
private String table; // 定義密鑰字母表
private int key; // 定義密鑰key
public Caeser(String table, int key) {
// 根據不同的字母表和不同的密鑰生成一個新的凱撒演算法,達到通用的目的
super();
this.table = table;
this.key = key;
}
public String encrypt(String from) {
//凱撒加密演算法,傳入明文字元串,返回一個密文字元串
String to = "";
for (int i = 0; i < from.length(); i++) {
to += table.charAt((table.indexOf(from.charAt(i))+key)%table.length());
}
return to;
}
public static void main(String[] args) {
Caeser caeser = new Caeser("abcdefghijklmnopqrstuvwxyz", 3);
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入要加密的字元串");
String str =scanner.nextLine(); //輸入字元串 security
String result = caeser.encrypt(str); //調用加密方法進行加密
System.out.print(result); // 可得結果 vhfxulwb
}
}
B. 用匯編語言編寫 簡易加密解密程序
; 本程序通過編譯,運行正確
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
push dx
lea dx,Str_Addr
mov ah,9
int 21h
pop dx
EndM
; -----------------------------------------
; 功能:打開指定路徑下的文件。若打開成功,保存文件代號,設置進位標志;
; 否則,建立文件,保存文件代號,清進位標志
; 入口參數:dx=文件名地址,bx=文件代號保存地址
Open_File Proc Near
mov ax,3d02h ;以讀寫方式打開文件
int 21h
jc @@Error
mov [bx],ax ;成功打開,保存文件代號
stc ;設置進位標志
ret
@@Error: Output Open_Error
xor cx,cx ;新建文件屬性
Create_File:mov ah,3ch ;建立文件
int 21h
jc Create_File ;建立不成功,嘗試再建
mov [bx],ax ;成功建立,保存文件代號
clc ;清進位標志
ret
Open_File EndP
; -----------------------------------------
; 功能:對字元串緩沖區中的內容逐個字元加密
; 入口參數:si=字元串地址,cx=字元數
Encode_Str Proc Near
push si
push cx
lea di,Handle_File
mov al,[di][88] ;讀取密鑰
@@Encoding: xor byte ptr [si],al ;異或,第一步加密
push cx
mov cx,188
rol byte ptr [si],cl ;循環左移188位,第二步加密
pop cx
inc si ;下一個字元地址
loop @@Encoding ;處理下一個字元
pop cx
pop si
ret
Encode_Str EndP
; -----------------------------------------
; 功能:對字元串緩沖區中的內容逐個字元加密
; 入口參數:si=字元串地址,cx=字元數
Uncode_Str Proc Near
push si
push cx
lea di,Handle_File
mov al,[di][88] ;讀取密鑰
@@Uncoding: push cx
mov cx,188
ror byte ptr [si],cl ;循環右移188位,第一步解密
pop cx
xor byte ptr [si],al ;異或,第二步解密
inc si ;下一個字元地址
loop @@Uncoding ;處理下一個字元
pop cx
pop si
ret
Uncode_Str EndP
; -----------------------------------------
Handle_File dw ?,?,? ;文件代號
File_Name1 db 'c:\masm\rory00.txt',0 ;未加密的文本文件
File_Name2 db 'c:\masm\rory01.txt',0 ;加密後的文本文件
File_Name3 db 'c:\masm\rory02.txt',0 ;解密後的文本文件
Open_Error db 'Open file error,creat a new file.',13,10,13,10,7,'$'
Input_New db 'Input the new information:',13,10,'$'
Press_Key db 13,10,13,10,'The Encode and Uncode have been completed.',7
db 13,10,13,10,'Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
; -----------------------------------------
; 打開或建立三個文件
lea dx,Buffer ;文本內容處理緩沖區
mov cx,0ffc0h ;預留32個字的堆棧空間
sub cx,dx ;設置讀寫一次文件內容的位元組數
mov bp,cx ;暫存
lea dx,File_Name2 ;文件名地址
lea bx,Handle_File[2] ;文件代號保存地址
call Open_File ;打開指定路徑下的文件。若打開成功,保存文件代號;否則,建立文件,保存文件代號
lea dx,File_Name3 ;文件名地址
lea bx,Handle_File[4] ;文件代號保存地址
call Open_File
lea ax,@@jump000
push ax
call @@Locate_01
@@Locate_00:lea dx,File_Name1 ;文件名地址
lea bx,Handle_File ;文件代號保存地址
call Open_File
jc Read_File
; -----------------------------------------
; 若是新建文件,輸入文件內容,實施加密,寫到另一個文件
Input_Str: Output Input_New ;提示輸入新信息
lea dx,Buffer ;文本內容處理緩沖區
mov ah,0ah ;鍵盤輸入字元串
int 21h
lea si,Buffer[1] ;實際輸入的字元個數地址
lodsb ;讀取實際輸入的字元數
test al,0ffh
jz Input_Str ;若直接回車,未輸入任何字元,再次提示輸入新信息
mov dx,si ;數據緩沖區地址
mov cl,al ;實際輸入的字元數
xor ch,ch
mov bx,Handle_File ;讀取未加密的文本文件代號
Write_Uncod:mov ah,40h
int 21h
jc Write_Uncod ;寫入失敗,嘗試再寫
call Encode_Str ;逐個字元加密
mov dx,si ;數據緩沖區地址,要寫入的字元數已在cx中
mov bx,Handle_File[2] ;文件代號
Write_Coded:mov ah,40h
int 21h
jc Write_Coded ;寫入失敗,嘗試再寫
jmp @@Uncode
@@Locate_01:pop ax
ret
; -----------------------------------------
; 若成功打開文件,讀取文件內容,實施加密,寫到另一個文件
Read_File: lea dx,Buffer ;文本內容處理緩沖區
mov cx,bp
mov bx,Handle_File ;讀取未加密的文本文件代號
mov ah,3fh ;讀文件內容
int 21h
jc Read_File ;讀文件失敗,嘗試再讀
test ax,0ffffh
jz @@Uncode ;若實際讀取的位元組數為0,結束讀寫操作
lea si,Buffer
mov cx,ax
call Encode_Str ;逐個字元加密
mov dx,si ;數據緩沖區地址,要寫入的字元數已在cx中
mov bx,Handle_File[2] ;讀取目標文件代號
Write_File: mov ah,40h ;寫文件
int 21h
jc Write_File ;寫文件失敗,嘗試再寫
jmp Read_File
; -----------------------------------------
; 修改子程序Encode_Str和Encode_Str中的循環移位次數
@@jump000: mov byte ptr Encode_Str[13],6
mov byte ptr Uncode_Str[11],6
lea ax,@@Locate_00
push ax
call @@Locate_01
; -----------------------------------------
; 將加密完的內容解密,寫入第三個文本文件
@@Uncode: xor dx,dx
xor cx,cx
Loca_Seek1: mov bx,Handle_File[4] ;讀取解密後的文本文件代號
mov ax,4200h ;移動文件指針至文件頭
int 21h
jc Loca_Seek1
Loca_Seek2: mov bx,Handle_File[2] ;讀取加密後的文本文件代號
mov ax,4200h ;移動文件指針至文件頭
int 21h
jc Loca_Seek2
lea dx,Buffer ;文本內容處理緩沖區
Read_File1: mov cx,bp
mov bx,Handle_File[2] ;讀取加密後的文本文件代號
mov ah,3fh ;讀文件內容
int 21h
jc Read_File1 ;讀文件失敗,嘗試再讀
test ax,0ffffh
jz Close_File1 ;若實際讀取的位元組數為0,結束讀寫操作,關閉文件
lea si,Buffer
mov cx,ax
call Uncode_Str ;逐個字元解密
mov dx,si ;數據緩沖區地址,要寫入的字元數已在cx中
mov bx,Handle_File[4] ;讀取解密後的文本文件代號
Write_File1:mov ah,40h ;寫文件
int 21h
jc Write_File1 ;寫文件失敗,嘗試再寫
jmp Read_File1
Close_File1:mov bx,Handle_File ;讀取未加密的文本文件代號
mov ah,3eh ;關閉文件
int 21h
jc Close_File1
Close_File2:mov bx,Handle_File[2] ;讀取加密後的文本文件代號
mov ah,3eh ;關閉文件
int 21h
jc Close_File2
Close_File3:mov bx,Handle_File[4] ;讀取解密後的文本文件代號
mov ah,3eh ;關閉文件
int 21h
jc Close_File3
Output Press_Key ;提示操作完成,按任意鍵結束程序
mov ah,1
int 21h
Exit_Proc: mov ah,4ch ;結束程序
int 21h
ALIGN 10h ;節對齊
Buffer db 255 ;文本內容處理緩沖區
Code ENDS
END Start ;編譯到此結束
C. 編寫程序,實現對任意字元串的加密和解密操作
Dim a() As String, b() As Integer, n As Integer
Text2 = ""
n = Len(Text1)
ReDim a(n)
ReDim b(n + 3)
For i = 1 To n
a(i) = Mid(Text1, i, 1)
If (Asc(a(i)) >= 65 And Asc(a(i)) <= 90) Or (Asc(a(i)) >= 97 And Asc(a(i)) <= 122) Then
b(i) = Asc(a(i)) + 3
If b(i) > Asc("Z") And b(i) < Asc("a") Then b(i) = Asc("A") + b(i) - Asc("Z") - 1
If b(i) > Asc("z") Then b(i) = Asc("a") + b(i) - Asc("z") - 1
Else
b(i) = Asc(a(i))
End If
a(i) = Chr(b(i))
Text2 = Text2 & a(i)
Next
Text3 = Text2
End Sub
Private Sub Command2_Click()
Dim a() As String, b() As Integer, n As Integer
Text4 = ""
n = Len(Text3)
ReDim a(n)
ReDim b(n + 3)
For i = 1 To n
a(i) = Mid(Text3, i, 1)
If (Asc(a(i)) >= 65 And Asc(a(i)) <= 90) Or (Asc(a(i)) >= 97 And Asc(a(i)) <= 122) Then
b(i) = Asc(a(i)) - 3
If b(i) >= 62 And b(i) < Asc("A") Then b(i) = Asc("Z") - (Asc("A") + b(i)) + 1
If b(i) >= 94 And b(i) < Asc("a") Then b(i) = Asc("z") - Asc("a") + b(i) + 1
Else
b(i) = Asc(a(i))
End If
a(i) = Chr(b(i))
Text4 = Text4 & a(i)
Next
End Sub
為便於調試對照,其中將加密後的文件直接放在了TEXT3中。調試完可去掉
D. C++ 一個關於加密解密的程式 寫註解
那幾個頭文件按是編程者自己加上去的。
因為,代碼中用到了若干庫函數,例如remove(), rename(0, getch(), isdigit(), puts()等等
有些庫函數不是在stdio.h中聲明的,所以編譯的時候會提示沒有對應的函數,
需要把那些函數所對應的頭文件包含進來。
E. c++怎麼編寫程序實現文件加密和解密
#include <iostream>
#define BufLength 100
void Encrypted_Decrypt(char* filepath, char* sec, int seclegth)
{
FILE * file = fopen(filepath, "r+");
if (NULL == file)
{
std::cout << "打開文件出錯" << std::endl;
return;
}
char buffer[BufLength];
char secret[BufLength];
int n = 0;
while ((n = fread(buffer, 1, BufLength, file))> 0)
{
for (int i = 0; i < n; i++)
secret[i] = buffer[i] ^ sec[i % (seclegth + 1)];//加密
fseek(file, -n, SEEK_CUR);//移動字元串頭在文件中的位置
fwrite(secret, 1, n, file);//覆蓋寫入秘文
fseek(file, n, SEEK_CUR);//移動字元串尾在文件中的位置,下次循環讀取下一串
}
fclose(file);
}
int main()
{
std::cout << "輸入密碼:";
char psw[256];
std::cin >> psw;
std::cout << "加密或者解密文件(全路徑如d:/1.txt):";
char filepath[256];
std::cin >> filepath;
Encrypted_Decrypt(filepath, psw, strlen(psw));
return 0;
}
F. java編寫數字加密解密
//package wangcai.test;
public interface Endecryption {
public static final byte[] EN={48,49,50,51,52,53,54,55,56,57};
public static final byte[] DE={55,53,57,49,51,54,56,48,50,52};
}
//package wangcai.test;
import java.util.Scanner;
public class Cryption implements Endecryption{
/*
* 原始數字與加密後得到的密文數字之間的對應關系如下:
原始數字:0 1 2 3 4 5 6 7 8 9
密文數字:7 5 9 1 3 6 8 0 2 4
試編寫程序把原始數字轉換成加密密文或把加密密文轉換成原始數字。
輸入:
1 6 (第一個數表示加密或解密:1加密,2解密;第二個數表示數字的個數)
1 9 9 7 7 1 (待處理的數字內容)
輸出:
5 4 4 0 0 5
*/
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
Cryption c=new Cryption();
System.out.println("請輸入是加密還是解密:1加密,2解密");
int ende=sc.nextInt();
if(ende==1)
{
System.out.println("請輸入加密的數字個數");
int num=sc.nextInt();
System.out.println("請輸入"+num+"個數字");
String temp=new Scanner(System.in).nextLine();
System.out.println(c.Encryption(temp));
}
else if(ende==2)
{
System.out.println("請輸入解密的數字個數");
int num=sc.nextInt();
System.out.println("請輸入"+num+"個數字");
String temp=new Scanner(System.in).nextLine();
System.out.println(c.Decryption(temp));
}
else
{
System.out.println("輸入錯誤");
}
}
/**
* 加密
* @param temp
* @return
*/
public String Encryption(String temp)
{
String result="";
byte[] temp_byte=temp.getBytes();
for(byte b:temp_byte)
{
int i=0;
for(;i<EN.length;i++)
{
if(b==EN[i])
{
result+=(char)DE[i];
break;
}
}
if(i==EN.length)
{
result+=(char)b;
}
}
return result;
}
/**
* 解密
* @param temp
* @return
*/
public String Decryption(String temp)
{
String result="";
byte[] temp_byte=temp.getBytes();
for(byte b:temp_byte)
{
int i=0;
for(;i<DE.length;i++)
{
if(b==DE[i])
{
result+=(char)EN[i];
break;
}
}
if(i==DE.length)
{
result+=(char)b;
}
}
return result;
}
}
加密解密方面的一般採用byte來實現
G. C語言編寫對文件加密及解密
常用簡單的加密就是把字元移位,讀取一個字元,將它+100,然後存為新文件中,解密時就讀取-100,然後就是原文件了。還有就是讀個字元和一個值異或,解密時還用這個加密的異或一遍,比較省力,一個方法就完成加解密了。
H. 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); //將位元組數組轉化為字元串,獲得加密後的字元串密碼解密與之差不多
I. 如何給rar壓縮文件添加密碼和注釋
RAR 和 ZIP 兩種格式均支持加密功能。
若要加密文件,在壓縮之前你必須先指定密碼,或直接在 壓縮文件名和參數 對話框中指定。
在 命令行 模式時使用開關 -p[密碼]。
而在 WinRAR 圖形界面時,要輸入密碼你可以按下 Ctrl+P 或者是在 文件菜單 選擇「設置默認密碼」命令。
另一種方式是單擊 WinRAR 窗口底部左下角的鑰匙圖標。在 壓縮文件名和參數對話框 里的「高級選項」組中按下「設置密碼」按鈕輸入密碼。
和 ZIP 不同,RAR 格式不只允許數據,而且其它的可感知的壓縮文件區域:文件名、大小、屬性、注釋和其它塊都可加密。如果你希望這樣做,你需要在密碼對話框中設置「加密文件名」 選項,或在命令行模式使用 -p[密碼] 的開關 -hp[密碼]。以這種方式加密的文件,如果沒有密碼甚至不可能查看文件列表。
當不再需要的時候,別忘了將輸入的密碼刪除。不然你或許又加密了別的壓縮文件,但卻不希望使用同一組密碼。要刪除密碼時,只需要輸入空字元串來替換原先的密碼,或者先關閉 WinRAR 並重新啟動一次。當有密碼存在時,鑰匙的圖標是紅色的,否則它是黃色的。而且,當你使用密碼開始壓縮操作時,標題欄 壓縮文件名和參數對話框 也會閃爍兩次。
如果你在 壓縮文件名和參數 對話框直接輸入它,你不需要刪除密碼。這不同於其它方式,此類密碼僅在單一壓縮操作有效,並在完成後它會自動刪除。
當解壓加密的文件時,開始操作之前你也可以不需要事先輸入密碼。如果 WinRAR 遇到加密的文件,而解壓之前未先輸入密碼的話,它便會提示用戶輸入密碼。
WinRAR 支持 ZIP 2.0 格式使用私有加密演算法。 RAR 壓縮文件使用更強大的 AES-128 標准加密。如果你需要加密重要的信息,選擇 RAR 壓縮文件格式會比較好一些。為了確實的安全性,密碼長度請最少要 8 個字元。不要使用任何語言的單詞作為密碼,最好是任意的隨機組合字元和數字,並且要注意密碼的大小寫。請記住,如果你遺失你的密碼,你將無法取出加密的文件,就算是 WinRAR 的作者本身也無法解壓加密過的文件。
J. 怎樣用C語言編寫簡單加密程序
你就寫個字元數組將字元存進數組,然後將數組的每個元素加4再賦值給自己就行了
例如
char a[3]={'a','b','c'};
for(i=0;i<3;i++)
a[i]+=4;
再輸出數組元素就是加密後的了
謝謝採納