public class ElGamal
{
private static final int MAXINT64LEN = sizeof(long); //用来作为读取的单位长度
private static final String tempPrePadding = "_elgpad"; //用来生成paded文件的文件名
private static final String tempPreTransforming = "_elgtrans"; //用来生成transformed文件的文件名
private static final int BITSLEN = 60; //密钥的长度
private RandomPrimeGenerator r = new RandomPrimeGenerator(); //用来生成随机数,及进行其他运算
private long p; //大素数
private long a; //生成元
private long sk; //私钥
private long pk; //公钥
public ElGamal(long p, long sk)
{
this.p = p;
this.sk = sk;
}
public final void init4Encode(long a)
{
this.a = a;
this.pk = r.modPower(a, sk, p);
}
//将输入的文件进行变换之后,再加密,输出到输出文件中
public final void Encode(String inputFile, String outputFile)
{
String path = Path.GetDirectoryName(inputFile);
String name = Path.GetFileName(inputFile);
String transformedFile = path + "\\"+tempPreTransforming + name;
prepare4Encoding(inputFile, transformedFile, p);
ElGamalEncode(transformedFile, outputFile);
File.Delete(transformedFile);
}
//将输入的文件进行变换之后,再解密,输出到输出文件中
public final void Decode(String inputFile, String outputFile)
{
String path = Path.GetDirectoryName(inputFile);
String name = Path.GetFileName(inputFile);
String decodedFile = path +"\\"+ tempPrePadding+name;
ElGamalDecode(inputFile, decodedFile);
postDecoding(decodedFile, outputFile, p);
File.Delete(decodedFile);
}
//对于已经经过变换之后的文件,直接进行加密
private void ElGamalEncode(String inputFile, String outputFile)
{
FileStream finput = openFile(inputFile);
if (finput == null)
{
return;
}
FileStream foutput = createFile(outputFile);
if (foutput == null)
{
return;
}
long m;
while ((m = inputInt64(finput)) != -1)
{
long k = r.nextInt64(0, p - 1);
long y1 = r.modPower(a, k, p);
byte[] temp = BitConverter.GetBytes(y1);
foutput.Write(temp, 0, MAXINT64LEN);
long pk1 = r.modPower(pk, k, p);
long y2 = r.multiplyMod(m, pk1, p);
foutput.Write(BitConverter.GetBytes(y2), 0, MAXINT64LEN);
}
finput.Close();
foutput.Close();
}
//将变换之后的文件进行直接解密
private void ElGamalDecode(String inputFile, String outputFile)
{
FileStream finput = openFile(inputFile);
if (finput == null)
{
return;
}
FileStream foutput = createFile(outputFile);
if (foutput == null)
{
return;
}
long y1;
while ((y1 = inputInt64(finput)) != -1)
{
long y2 = inputInt64(finput);
long t = r.modPower(y1, sk, p);
t = r.reverse(t, p);
详细解决方案
一个加密的java程序。从C#转换过来的。很多无法解析有关问题
热度:106 发布时间:2016-04-23 01:23:45.0
相关解决方案
- java 乱码 汉字是 ? 如何转换成汉字
- java web 登录次数限制,该如何解决
- java 工商银行网银支付 B2B的 都亟需什么,需要注意什么
- Java Applet程序从JDK6升级到7时遇到的有关问题
- java web 视频相干
- java 系统单点登录解决方案
- java 获取客户端IP解决办法
- JAVA 后台怎么获得前台页面FCKedit编辑器中的内容以及内容的样式
- java 正则化匹配有关问题
- JAVA WEB导航条,该怎么处理
- java 中Node 有关问题
- 吐了,java Timer 终止不了。
- java web开发解决办法
- 关于 java cast 有关问题,你明白不
- java ftp 下传和上载乱码有关问题
- java web项目上的一些文件
- Hibernate操作数据库 报错java.lang.Integer cannot be cast to java.lang.String如何改
- java struts 文件上载
- java web baidu map开发
- JAVA WEB导航条解决办法
- java 编写ftp上载
- java web中的一个有关问题,困扰小弟我很久了
- java web 与tomcat解决办法
- java web基于j2ee的一些有关问题
- java 内网外网的一个需求,该怎么处理
- jsp 页面 安插ArrayList 报错。为什么,已经加了import="java.util."了呀!
- java dwg 怎样用java把dwg便是aoutcad的格式文件转换成gif,jpg等格式
- 求《Java Web 程序设计与项目实践》解决办法
- java webservice解决方法
- java 与jsp,该怎么解决