java中的加密和解密密码

问题描述 投票:0回答:1

我正在尝试做功课来创建一个名为Password的类,该类实现了Encryptable接口。

我正在尝试使用RSA算法。

[我使用了Google的一些RSA代码参考,并在下面生成了我的代码。

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Key;
import java.util.Arrays;
import javax.crypto.Cipher;
import java.util.Scanner;
public class Password
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        String password = sc.nextLine();
        KeyPair keyPair = RSAKeyPair.keyPairRSA();
        Key publicKey = keyPair.getPublic();
        Key privateKey = keyPair.getPrivate();
        System.out.println("Original: " + password);
        byte[] encrypted = RSAEncryptDecrypt.encrypt(password, privateKey);
        System.out.println("Encrypted: " + new String(encrypted));
        byte[] decrypted = RSAEncryptDecrypt.decrypt(encrypted, publicKey);
        System.out.println("Decrypted: " + new String(decrypted));
    }
}
final class RSAConstants {
    private RSAConstants() {
    }
    public static final String ALGORITHM = "RSA";
    public static final int ALGORITHM_BITS = 2048;
}
class RSAKeyPair {
    public static KeyPair keyPairRSA() {
        KeyPairGenerator generator = null;
        try {
            generator = KeyPairGenerator.getInstance(RSAConstants.ALGORITHM);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (generator != null) {
            generator.initialize(RSAConstants.ALGORITHM_BITS);
            KeyPair keyPair = generator.genKeyPair();
            return keyPair;
        }
        return null;
    }
}

class RSAEncryptDecrypt {
    public static byte[] encrypt(String original, Key privateKey) {
        if (original != null && privateKey != null) {
            byte[] bs = original.getBytes();
            byte[] encData = convert(bs, privateKey, Cipher.ENCRYPT_MODE);
            return encData;
        }
        return null;
    }
    public static byte[] decrypt(byte[] encrypted, Key publicKey) {
        if (encrypted != null && publicKey != null) {
            byte[] decData = convert(encrypted, publicKey, Cipher.DECRYPT_MODE);
            return decData;
        }
        return null;
    }
    private static byte[] convert(byte[] data, Key key, int mode) {
        try {
            Cipher cipher = Cipher.getInstance(RSAConstants.ALGORITHM);
            cipher.init(mode, key);
            byte[] newData = cipher.doFinal(data);
            return newData;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

我的输入是:

InterstellarGalactica

除加密密码的结果外,一切顺利结果如下

Original: InterstellarGalactica
Encrypted: Sªë/H?ù,X?U4??A???ìñáQ
÷?      *?7*??d?'å?Ñ¡w °??? Pè???«{?D÷??cB???'É »???qªîÉDë??~hb??z8?çÿ?hí?{mè?{*îèGê??WÅ{x??ï.5¼?úü;e??G?-F?shèn?FI
áh`UƒIàB!?åäô+D<&"?)?????ß!??3ä?¬???â???<?¬Ü?{ @ó12B?òt?ƒòÆr²Ä·oHQ?ë?«ú?°?î??Äy?:X^<?
&:ryb\?¼
Decrypted: InterstellarGalactica

为什么它变得毫无意义?

我的代码有什么问题吗?

您能解释如何以正确的方式进行操作吗?]

提前感谢。

我正在尝试做功课来创建一个名为Password的类,该类实现了Encryptable接口。我正在尝试使用RSA算法。我使用了Google的一些RSA代码参考,并得到了...

java encryption rsa password-encryption
1个回答
0
投票

您以错误的方式使用RSA:

© www.soinside.com 2019 - 2024. All rights reserved.