import java.util.HashMap;
import java.util.Map;
public class NewJFrame extends javax.swing.JFrame {
public static Map<Character,Integer> charmap = new HashMap<Character,Integer>();
public static char stringmap[] = new char[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',
'p','q' ,'r','s','t','u','v','w','x','y','z'
};
static{
charmap.put('a', 1);
charmap.put('b', 2);
charmap.put('c', 3);
charmap.put('d', 4);
charmap.put('e', 5);
charmap.put('f', 6);
charmap.put('g', 7);
charmap.put('h', 8);
charmap.put('i', 9);
charmap.put('j', 10);
charmap.put('k', 11);
charmap.put('l', 12);
charmap.put('m', 13);
charmap.put('n', 14);
charmap.put('o', 15);
charmap.put('p', 16);
charmap.put('q', 17);
charmap.put('r', 18);
charmap.put('s', 19);
charmap.put('t', 20);
charmap.put('u', 21);
charmap.put('v', 22);
charmap.put('w', 23);
charmap.put('x', 24);
charmap.put('y', 25);
charmap.put('z', 26);
charmap.put('A', 1);
charmap.put('B', 2);
charmap.put('C', 3);
charmap.put('D', 4);
charmap.put('E', 5);
charmap.put('F', 6);
charmap.put('G', 7);
charmap.put('H', 8);
charmap.put('I', 9);
charmap.put('J', 10);
charmap.put('K', 11);
charmap.put('L', 12);
charmap.put('M', 13);
charmap.put('N', 14);
charmap.put('O', 15);
charmap.put('P', 16);
charmap.put('Q', 17);
charmap.put('R', 18);
charmap.put('S', 19);
charmap.put('T', 20);
charmap.put('U', 21);
charmap.put('V', 22);
charmap.put('W', 23);
charmap.put('X', 24);
charmap.put('Y', 25);
charmap.put('Z', 26);
}
public NewJFrame() {
initComponents();
}
private char change(char c) {
int i = charmap.get(c);
int k = 2;
int j;
j=(i+k) % 26 ;
return stringmap[--j];
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
ba = new javax.swing.JButton();
ta = new javax.swing.JTextField();
tb = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
ba.setText("轉換");
ba.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
baActionPerformed(evt);
}
});
tb.setEnabled(false);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(66, 66, 66)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(tb)
.addComponent(ta, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(147, 147, 147)
.addComponent(ba, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(59, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(ta, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(tb, javax.swing.GroupLayout.DEFAULT_SIZE, 38, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addComponent(ba)
.addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void baActionPerformed(java.awt.event.ActionEvent evt) {
String aa = ta.getText();
char bb[] = aa.toCharArray();
char cc[] = new char[bb.length];
for(int i = 0; i < bb.length;i++){
cc[i] = change(bb[i]);
}
tb.setText(String.valueOf(cc));
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton ba;
private javax.swing.JPanel jPanel1;
private javax.swing.JTextField ta;
private javax.swing.JTextField tb;
// End of variables declaration
}
private void initComponents() 這個方法不用太在意,只是個生成界面的方法而已......
看不懂這個方法也沒關系
⑵ 電腦操作的數據加密方法
在傳統上,我們有幾種方法來加密數據流。所有這些方法都可以用軟體很容易的實現,但是當我們只知道密文的時候,是不容易破譯這些加密演算法的(當同時有原文和密文時,破譯加密演算法雖然也不是很容易,但已經是可能的了)。最好的加密演算法對系統性能幾乎沒有影響,並且還可以帶來其他內在的優點。例如,大家都知道的pkzip,它既壓縮數據又加密數據。又如,dbms的一些軟體包總是包含一些加密方法以使復制文件這一功能對一些敏感數據是無效的,或者需要用戶的密碼。所有這些加密演算法都要有高效的加密和解密能力。
幸運的是,在所有的加密演算法中最簡單的一種就是「置換表」演算法,這種演算法也能很好達到加密的需要。每一個數據段(總是一個位元組)對應著「置換表」中的一個偏移量,偏移量所對應的值就輸出成為加密後的文件。加密程序和解密程序都需要一個這樣的「置換表」。事實上,80x86 cpu系列就有一個指令『xlat』在硬體級來完成這樣的工作。這種加密演算法比較簡單,加密解密速度都很快,但是一旦這個「置換表」被對方獲得,那這個加密方案就完全被識破了。更進一步講,這種加密演算法對於黑客破譯來講是相當直接的,只要找到一個「置換表」就可以了。這種方法在計算機出現之前就已經被廣泛的使用。
對這種「置換表」方式的一個改進就是使用2個或者更多的「置換表」,這些表都是基於數據流中位元組的位置的,或者基於數據流本身。這時,破譯變的更加困難,因為黑客必須正確的做幾次變換。通過使用更多的「置換表」,並且按偽隨機的方式使用每個表,這種改進的加密方法已經變的很難破譯。比如,我們可以對所有的偶數位置的數據使用a表,對所有的奇數位置使用b表,即使黑客獲得了明文和密文,他想破譯這個加密方案也是非常困難的,除非黑客確切的知道用了兩張表。
與使用「置換表」相類似,「變換數據位置」也在計算機加密中使用。但是,這需要更多的執行時間。從輸入中讀入明文放到一個buffer中,再在buffer中對他們重排序,然後按這個順序再輸出。解密程序按相反的順序還原數據。這種方法總是和一些別的加密演算法混合使用,這就使得破譯變的特別的困難,幾乎有些不可能了。例如,有這樣一個詞,變換起字母的順序,slient 可以變為listen,但所有的字母都沒有變化,沒有增加也沒有減少,但是字母之間的順序已經變化了。
但是,還有一種更好的加密演算法,只有計算機可以做,就是字/位元組循環移位和xor操作。如果我們把一個字或位元組在一個數據流內做循環移位,使用多個或變化的方向(左移或右移),就可以迅速的產生一個加密的數據流。這種方法是很好的,破譯它就更加困難!而且,更進一步的是,如果再使用xor操作,按位做異或操作,就就使破譯密碼更加困難了。如果再使用偽隨機的方法,這涉及到要產生一系列的數字,我們可以使用fibbonaci數列。對數列所產生的數做模運算(例如模3),得到一個結果,然後循環移位這個結果的次數,將使破譯次密碼變的幾乎不可能!但是,使用fibbonaci數列這種偽隨機的方式所產生的密碼對我們的解密程序來講是非常容易的。
在一些情況下,我們想能夠知道數據是否已經被篡改了或被破壞了,這時就需要產生一些校驗碼,並且把這些校驗碼插入到數據流中。這樣做對數據的防偽與程序本身都是有好處的。但是感染計算機程序的病毒才不會在意這些數據或程序是否加過密,是否有數字簽名。所以,加密程序在每次load到內存要開始執行時,都要檢查一下本身是否被病毒感染,對與需要加、解密的文件都要做這種檢查!很自然,這樣一種方法體制應該保密的,因為病毒程序的編寫者將會利用這些來破壞別人的程序或數據。因此,在一些反病毒或殺病毒軟體中一定要使用加密技術。
循環冗餘校驗是一種典型的校驗數據的方法。對於每一個數據塊,它使用位循環移位和xor操作來產生一個16位或32位的校驗和 ,這使得丟失一位或兩個位的錯誤一定會導致校驗和出錯。這種方式很久以來就應用於文件的傳輸,例如 xmodem-crc。 這是方法已經成為標准,而且有詳細的文檔。但是,基於標准crc演算法的一種修改演算法對於發現加密數據塊中的錯誤和文件是否被病毒感染是很有效的。
⑶ 如何給數據加密啊
1、數據可以簡單的分為兩類,純數據和程序。
2、純數據,一個最簡單的加密方法是通過winrar來壓縮並設置密碼,網上有很多人嘗試過破解winrar加密過的文件,基本上都是無解的,而且只能暴力破解。
3、程序,程序加密,有專門的行業,最簡單的做法是加殼,有的還使用加密狗。
⑷ 數據加密及解密的程序 (匯編語言)
IO MACRO X,Y
PUSH AX
LEA DX,X
MOV AH,Y
INT 21H
POP AX
ENDM
STACKS SEGMENT
DB 512 DUP(0)
STACKS ENDS
DATAS SEGMENT
COUNT = 8
MLAB DB 'liuchengzyxwvtsrqpomkjfdba' ;密碼表
JLAB DB 'zydxfwhebvuatgsrqponcmlkji' ;解密表
TAB DB COUNT DUP (' '),13,10,'$' ;存放輸入
MCODE DB COUNT DUP (' '),13,10,'$' ;存放密文
JCODE DB COUNT DUP (' '),13,10,'$' ;存放譯文
SAY DB 'Please input code:',13,10,'$' ;
PRINT DB 'Sort:','$'
NUMBER DW 0 ;存放密文長度
CR_LF DB 13,10,'$' ;回車換行
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKS
START PROC ;保存程序段前綴地址PSP+0
XOR AX,AX ;AX清0 ,條件位設置空
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
CALL MP ;調用加密字程序
IO CR_LF,9 ;顯示回車換行
CALL SORTP ;調用排序程序
IO PRINT,9
IO TAB,9 ;顯示排序
IO MCODE,9 ;顯示密文,用於驗證正確性
CALL JJM
IO JCODE,9 ;顯示譯文
RET
START ENDP
;加密字程序名:MP
;出口參數:MCODE 存放密文
MP PROC
IO SAY,9 ; Please input code:
MOV CX,COUNT ;字母串最大長度送CX
MOV SI,0
INPUT:
MOV AH,7 ;輸入字元,不回顯->AL
INT 21H
MOV TAB[SI],AL
PUSH AX ;保護現場AL
MOV DL,'*' ;每輸入一個字元顯示一個*,修改AL='*'
MOV AH,2
INT 21H
POP AX
SUB AL,61H ;將字元轉換為密碼表下標
LEA BX,MLAB ;密碼表首地址送BX
XLATB ;查密碼表獲得密文
MOV MCODE[SI],AL ;保存密文
INC SI ;
LOOP INPUT ;是否輸入了8個字元
MOV NUMBER,SI ;保存輸入字元的個數
RET
MP ENDP
;解密字程序名JJM
;入口參數;NUMBER 密文長度,MCODE密文
;出口參數JCODE 譯文
JJM PROC
CLD
MOV CX,NUMBER ;密文長度送CX
LEA SI,MCODE ;密文區首址送SI
LEA DI,JCODE ;譯文區首址送DI
LEA BX,JLAB ;解密表首地址送BX
J:
LODSB ;取密文[SI]->AL
SUB AL,61H ;將密文轉換為解密表的下標
XLATB ;查密碼表獲得譯文[BX+AL]->AL
STOSB ;保存譯文AL->[DI]
LOOP J ;解密是否完成
RET
JJM ENDP
;冒泡排序子程序
;入口參數:STRING 待排序字元串
SORTP PROC
MOV DI,OFFSET TAB ;數組偏移地址送DI
MOV BX,-1
LOOPOUT:
CMP BX,-1
JNE SortEND ;標識不為-1則排序完成
XOR BX,BX
MOV CX,COUNT
MOV SI,DI
LOOPIN:
MOV AL,[SI]
CMP AL,[SI+1] ;與第二個比較大小
JGE NOCHANGE ;小於則交換
XCHG AL,[SI+1]
MOV [SI],AL ;存入數組
MOV BX,-1
NOCHANGE:
ADD SI,1
LOOP LOOPIN
JMP LOOPOUT
SortEND:
RET
SORTP ENDP
CODES ENDS
END START
⑸ 匯編語言課程設計---求數據加密的具體程序(小女子,跪求~~)
; 本程序通過編譯,運行正確
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:輸出回車換行
Enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Enter_CTLF endp
; -----------------------------------------
Encode db '7846302951'
Prompt_Str1 db 'Please input the orical code: $'
Prompt_Str2 db 'The encode: $'
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
Output Prompt_Str1 ;提示輸入明碼
cld
lea di,String ;明碼字元串地址
mov cx,20 ;明碼數字個數,可以不到20個數字,Esc鍵結束明碼輸入
Read_Encode:mov ah,1
int 21h
cmp al,13 ;回車?
jz Disp_Encode
cmp al,'0'
jb Read_Encode
cmp al,'9'
ja Read_Encode
stosb
loop Read_Encode
Disp_Encode:mov cx,di
sub cx,offset String ;實際輸入的明碼數字個數
lea si,String ;明碼字元串地址
lea bx,Encode ;密碼地址
Encoding: lodsb ;讀入1位明碼
and al,0fh
xlat ;查表,取得對應的密碼
mov [si-1],al ;寫密碼
loop Encoding
mov byte ptr [si],'$' ;顯示字元串採用DOS調用,9號功能,要求字元串以「$」結尾
call Enter_CTLF ;輸出一個回車、換行
call Enter_CTLF ;輸出一個回車、換行
Output Prompt_Str2 ;提示顯示密碼
Output String ;顯示密碼
Exit_Proc: mov ah,4ch ;結束程序
int 21h
String db ?
Code ENDS
END Start ;編譯到此結束
⑹ C語言中的數據加密(跪求)
/* Note:Your choice is C IDE */
#include "stdio.h"
#define len 8
void func(int *p) /*加密*/
{
int i;
for(i=0;i<len;i++)
p[i]=(p[i]+5)%10;
}
int main()
{
int i,j,num[len+1];
for(i=0;i<len;i++)
{
scanf("%d",&num[i]);
if(num[i]<0||num[i]>9){printf("error\n");
return(0);}
}
for(i=0;i<(len-2)/2;i++) /*數據倒序*/
{
j=num[i];
num[i]=num[len-1-i];
num[len-1-i]=j;
}
func(num);
j=num[0]; /*第一位和最後一位交換*/
num[0]=num[len-1];
num[len-1]=j;
for(i=0;i<len;i++)
printf("%d",num[i]);
return 0;
}
⑺ 求一匯編語言所寫簡單數據加密程序(求急,加分)
去掉了那個中斷部分。
; 本程序通過編譯,運行正確
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
Encode
db
'7846302951'
Prompt_Str1 db
'Please input the orical code: $'
Prompt_Str2 db
7,13,10,13,10,'The encode: $'
Prompt_Str3 db
13,10,13,10,'Please record the encode and than press any key to continue...$'
String
db
20,?,20 p(?) ;明碼輸入緩沖區
Start:
push cs
pop ds
push cs
pop es
Output Prompt_Str1 ;提示輸入明碼
cld
lea
di,String ;明碼字元串地址
mov
cx,20 ;明碼數字個數,可以不到20個數字,回車鍵結束明碼輸入
Read_Encode:mov
ah,1
int
21h
cmp
al,13 ;回車?
jz
Disp_Encode
cmp
al,'0'
jb
Read_Encode
cmp
al,'9'
ja
Read_Encode
stosb
loop Read_Encode
Disp_Encode:mov
cx,di
sub
cx,offset String ;實際輸入的明碼數字個數
lea
si,String ;明碼字元串地址
lea
bx,Encode ;密碼地址
Encoding: lodsb ;讀入1位明碼
and
al,0fh
xlat ;查表,取得對應的密碼
mov
[si-1],al ;寫密碼
loop Encoding
mov
byte ptr [si],'$' ;顯示字元串採用DOS調用,9號功能,要求字元串以「$」結尾
Output Prompt_Str2 ;提示顯示密碼
Output String ;顯示密碼
Output Prompt_Str3 ;提示用戶記錄密碼
mov ah,1
int 21h
Exit_Proc: mov
ah,4ch ;結束程序
int
21h
Code
ENDS
END
Start ;編譯到此結束
補充回答:未知樓主要怎樣的原創,這個是我百分之百的原創。此前提供的連接,也是我百分之百的原創。不知樓主用什麼方法來判斷回答者的答案是否原創。