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 ;编译到此结束
补充回答:未知楼主要怎样的原创,这个是我百分之百的原创。此前提供的连接,也是我百分之百的原创。不知楼主用什么方法来判断回答者的答案是否原创。