gpt4 book ai didi

java - 尝试从 String 转换为 Int 会导致第一个字符为 '?'

转载 作者:行者123 更新时间:2023-12-01 09:06:17 25 4
gpt4 key购买 nike

我现在正在学校研究RSA编码系统,但是有一个问题我和我的老师都无法解决:

当我尝试解码编码文本时,程序将第一个字符返回为 ?,字符串的其余部分是正确的。也许有人可以帮助我,以及我是否可以做出其他一些改进。

PS:由于我是德国人,有些东西可能是德语,但与输出/返回无关。我已经包含了整个脚本,以便您能够完整地运行它并更快地找到我犯的错误。控制台将要求您输入以下内容:

1.Anfang=选取质数的数组开头

2.Ende=数组结束

3.Zahl die größer als 1, aber kleiner als phiN ist=输入任何素数,如 101、13 等

4.输入您想要编码的任何字符

5.您将获得带 ? 的未编码文本。作为第一个字符

package ggt;

import java.util.Scanner;

public class RSA {

public static long Prim (long a, long b){
boolean t = true;
long primzahl =1;
for (;a<(b+1);a++){
for (long i=2;i<=(a/2)&&(t==true);i++){
if (a%i==0){
t=false;
}

}
if (t==true){
primzahl= a;

}
t=true;
}
return primzahl;
}
public static boolean ggt(long a, long b){
long c=b;
while(!(a%c==0&&b%c==0)){
c=c-1;
}
if (c == 1){
return true;
}else{
return false;
}
}
public static int[] extendedGcd(int x, int y){
int u = 1;
int v = 0;
int s = 0;
int t = 1;
int q = 1;
int ue[] = new int[3];
while (y>0){
q = x/y;
x = y;
y = x-q*y;
u = s;
s = u-q*s;
v = t;
t = v-q*t;
}
ue[0]=x;
ue[1]=u;
ue[2]=v;
return ue;
}
public static void main(String[]args){
Scanner xx=new Scanner(System.in);
System.out.println("Anfang");
long a = xx.nextLong();
System.out.println("Ende");
long b = xx.nextLong();
long p = Prim(a,b);
System.out.println("Primzahl p= "+p);
long q = Prim(3,a);
System.out.println("Primzahl q= "+q);
//public key
long phiN = (p - 1) * (q - 1);
System.out.println("e soll größer als 1, aber kleiner als phiN sein. phiN ist"+phiN);
long e = xx.nextLong();
long enn=p*q;
if (e<1){
System.out.println("e ist nicht korrekt. Wer lesen kann, schafft es durch die Schule.");
System.exit(0);}
boolean be=ggt(e, phiN);
if (!(be==true)){
System.out.println("e ist nicht teilerfremd zu phiN");
System.exit(0);
}
System.out.println("Der Public Key ist "+e+","+enn);
//private key
int d=1;
while (!((e*d)%phiN==1)){
d=d+1;
}
System.out.println("Der Private Key ist "+d+","+enn);
System.out.println("Geben Sie bitte den zu verschlüsselnden Satz ein.");
//Verschlüsselung
Scanner yy=new Scanner(System.in);
String uncoded=yy.nextLine();
char []hj=uncoded.toCharArray();
int j=0;
long cancer;
System.out.println("Der Verschlüsselte Text lautet(von oben nach unten):");
for (int i=0; i != uncoded.length();i++){
char character=uncoded.charAt(i);
int ascii=(int)character;
//System.out.println(ascii);
//System.out.println(d);
//System.out.println(enn);
a=(long)(Math.pow(ascii, d));
cancer=a%enn;
//System.out.println(cancer);
//System.out.println(a);
cancer=((long)(Math.pow(cancer, e))%enn);
hj[j]=(char)cancer;
}System.out.println("Der entschlüsselte Text ist");
System.out.println(hj);
}
}

最佳答案

问题出在下面一行的算法

hj[j]=(char)cancer;

该行返回无效字符

您的变量“j”不会递增,因此“无效”变量将始终在 hj[j] 处替换,即位置 0(零)。

关于java - 尝试从 String 转换为 Int 会导致第一个字符为 '?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41257245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com