这个rsa算法哪里出错了呢? 为什么算的不对
public static void main(String[] args) {
int x = 3;
int y = 11;
int n = x * y;
int m = (x-1) * (y-1); // 20
//e * d - 1 = y * m
int e = 3;
int d = 7;
System.out.println((e * d) % m); // 1
//public n e //private n d
byte[] bytes = "a".getBytes(StandardCharsets.UTF_8);
//a^e % n = b 加密
pbyte(bytes);
int[] bytesne = new int[bytes.length];
for (int i = 0; i <bytes.length ; i++) {
long c = bytes[i];
for (int j = 1; j <e; j++) {
c*=bytes[i];
}
bytesne[i] = (byte)(c % n);
}
pint(bytesne);
//b^d % n = a
//a^d % n = b 解密
byte[] rr = new byte[bytes.length];
for (int i = 0; i <bytesne.length ; i++) {
long c = bytesne[i];
for (int j = 1; j <d; j++) {
c*=bytesne[i];
}
rr[i] = (byte)(c % n);
}
pbyte(rr);
System.out.println(new String(rr));
Integer.toBinaryString(n);
}
public static void pbyte(byte[] bytes){
for (byte aByte : bytes) {
System.out.print(aByte + ">>");
}
System.out.println();
}
public static void pint(int[] bytes){
for (int aByte : bytes) {
System.out.print(aByte+ ">>");
}
System.out.println();
}
1
97>>
25>>
31>>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
RSA要求明文m<n,而"a"=97>33。
计算没问题,解密出来31≡97 mod 33。