gpt4 book ai didi

java - 尝试理解RSA加密代码示例

转载 作者:行者123 更新时间:2023-11-30 03:30:58 25 4
gpt4 key购买 nike

我试图理解这段代码,但我无法理解它。因此,程序接收一个值并使用“RSA”算法对输入的值进行加密。

我不明白的是代码的 bytesToString 部分。程序是否将输入的值转换为字节,然后对字节进行加密?

public RSA() {
r = new Random();
p = BigInteger.probablePrime(bitlength, r);
q = BigInteger.probablePrime(bitlength, r);
N = p.multiply(q);

phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.probablePrime(bitlength/2, r);

while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) < 0 ) {
e.add(BigInteger.ONE);
}
d = e.modInverse(phi);
}

public static void main (String[] args) throws IOException
{
RSA rsa = new RSA();
DataInputStream in=new DataInputStream(System.in);

String teststring ;
System.out.println("Enter the plain text:");
teststring=in.readLine();
System.out.println("Encrypting String: " + teststring);
System.out.println("String in Bytes: " + bytesToString(teststring.getBytes()));

// encrypt
byte[] encrypted = rsa.encrypt(teststring.getBytes());
System.out.println("Encrypted String in Bytes: " + bytesToString(encrypted));


// decrypt
byte[] decrypted = rsa.decrypt(encrypted);
System.out.println("Decrypted String in Bytes: " + bytesToString(decrypted));

System.out.println("Decrypted String: " + new String(decrypted));

}

您可以查看 http://www.coders-hub.com/2013/04/implementation-of-rsa-using-java.html?showComment=1426355678160#c2330533116597007284 中的代码

程序的输出如下所示

Enter the plain text:
Hello world
Encrypting String: Hello world
String in Bytes: 7210110810811132119111114108100
Encrypted String in Bytes: 0-91-1-63245736-287660-6518-312926-102125-106-899450-8765-100100-126-1810592-123-65-26-104-96-894689-9746-1225763-1-94-43-3498-19-101-45-607227-69-79115-94-43-28-10123-7258-16-413-1854-51-24-11925-100-582056-89121-16-6010512239-1111188570-73-80-591-432-23-94-105-10311672381-76-28-1021-38-51-67-32122-2-10-51-86-15-37-104-5721100-84-444085-126-61-5011554-39-15-18-126-685-48-25-25124-11541-108-1846107112-104-9-56-101-90121582574-18-74-954184-80-6856-97-6797-23202-125-724833-19-26-934637-127-126-327399-834924-116-44-53-13-7526-8041104-4093123102101-95-2462-1684-8841119119-10581-9011178-83-521858-2321-570-107-10-54-708-981076-17-9934103-19-3943-11974-2365-1202630117-107-123-2411-47-624119-78
Decrypted String in Bytes: 7210110810811132119111114108100
Decrypted String: Hello world

这是公钥还是私钥?

最佳答案

Is the program converting the inputted values into bytes and then encrypting the bytes?

是的,加密通常是对二进制数据进行的。另一方面,RSA 原语对大整数使用模运算。您展示的 RSA 在内部使用 BigInteger 提供 constructor BigInteger(byte[] val)从字节数组中创建一个大整数。

还有一个constructor BigInteger(String val)它接受一个字符串,但假设该字符串仅包含要以 10 为基数表示法加密的数字,而不是任意数据。

Is any of that the public key or the private key?

不,这些值都不是公钥或私钥的表示。 key 对隐藏在RSA rsa = new RSA();后面。

公钥由模数N和公共(public)指数e组成。私钥由模数 N 和私有(private)指数 d 组成。通常,私钥还包含公共(public)指数,以便可以从私钥创建公钥。

优化的实现在私钥中具有您的实现不使用的其他中间值。

关于java - 尝试理解RSA加密代码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060072/

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