encipher.java
来自「用JAVA做的一个RSA加密解密程序,能实现密钥的生成并且对文件进行加密和解密」· Java 代码 · 共 100 行
JAVA
100 行
/**for Stream tools*/
import java.io.*;
/**for ArrayList*/
import java.util.*;
public class enCipher
{
/**计算有可能溢出的模m的整数幂的算法
*<P>pre:none.
*<P>post:返回a^t(mod n);
*@param a a^t(mod n)中的a
*@param t a^t(mod n)中的t
*@param n a^t(mod n)中的n
*/
long powMod(long a,long t,long n)
{
long c=0;
long d=1;
String b=Long.toBinaryString(t);
for(int i=b.length()-1;i>=0;i--)
{
c*=2;
d=(d*d)%n;
if(b.charAt((b.length()-1-i))=='1')
{
c+=1;
d=(d*a)%n;
}
/**调试代码
System.out.print("i="+i);
System.out.print(" c="+c);
System.out.print(" d="+d);
System.out.println();
*/
}
return d;
}
/**加密算法:
*<P>1,先读入加密的目标文件和公钥
*<P>2,用RSA算法对目标文件进行加密(每8个bit为一组,结果用long记录).
*<P>3,储存加密结果
*<P>pre:none
*<P>post:对文件加密
*/
enCipher(String enfilename,String keyfilename,String outfilename)
{
ArrayList mem_buffer=new ArrayList();
try{
DataInputStream infile=new DataInputStream(
new BufferedInputStream(
new FileInputStream(enfilename)));
DataInputStream key=new DataInputStream(
new BufferedInputStream(
new FileInputStream(keyfilename)));
long e=key.readLong();
long n=key.readLong();
while(infile.available()>0)
{
byte temp=infile.readByte();
long c=powMod(temp,e,n);
mem_buffer.add(new Long(c));
}
System.out.println("读取完成.");
DataOutputStream out1=new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(outfilename)));
long x;
System.out.println();
for(int i=0;i<mem_buffer.size();i++){
x = ((Long)mem_buffer.get(i)).longValue();
out1.writeLong(x);
}
out1.close();
System.out.println("加密完成");
}catch(EOFException e){
System.out.println("文件写入错误!");
}
catch(IOException e){
System.err.println("文件读取写入出错,请检查文件名的输入是否正确,该文件是否存在!\n 正确格式:data.dat或c:\\data.dat");
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?