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 web 应用)
- java 系统单点登录解决方案
- java.lang.NumberFormatException: For input string: "id"该如何处理
- java.lang.NoSuchMethodException: setId([Ljava.lang.String;)解决方法
- java 获取客户端IP解决办法
- JAVA 后台怎么获得前台页面FCKedit编辑器中的内容以及内容的样式
- java 正则化匹配有关问题
- java web 受阻
- java.lang.IllegalStateException: No output folder,该怎么解决
- java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.makeAccess,该如何解决
- java 乱码有关问题 急求大神
- java EE错误如何解决阿,都是过了,没有能解决的!
- java 工程打包有关问题 多谢各位大神!多谢
- JAVA WEB导航条,该怎么处理
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password,该如何处理
- java 中Node 有关问题
- 关于 java 引述传递和值传递,你的知否
- 吐了,java Timer 终止不了。
- Java Web 学习中有关问题,请高手指教
- java web中的url地址小疑点。
- java web开发解决办法
- java.lang.NullPointerException解决方法
- 关于 java cast 有关问题,你明白不
- java ftp 下传和上载乱码有关问题
- java web项目上的一些文件