首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何设置用户输入的密码,对java中用户输入的字符串进行加密?

如何设置用户输入的密码,对java中用户输入的字符串进行加密?
EN

Stack Overflow用户
提问于 2018-10-08 01:14:25
回答 1查看 165关注 0票数 0

我的代码有问题。具体操作步骤如下:本项目有以下要求:

使用用户输入的密码向用户索要字符串characters.

  • Encrypts
  1. 。加密过程是使用用Java实现的DES密码进行的。
  2. 在控制台中打印加密的字节array.
  3. Decrypts消息返回到原始字节数组,并在控制台中打印它。

我在第2步和第4步遇到了问题,您能给我一些建议吗?我一直收到错误:在线程"main“j中出现异常。

代码语言:javascript
复制
avax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:991)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:847)
    at com.sun.crypto.provider.DESCipher.engineDoFinal(DESCipher.java:314)
    at javax.crypto.Cipher.doFinal(Cipher.java:2164)
    at Main.main(Main.java:50)

你能给我出个主意吗?

代码语言:javascript
复制
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Arrays;
import java.util.Scanner;


public class Main {

    public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException, InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException {
        Scanner scan = new Scanner(System.in);

        System.out.println("Please Input A String Of Characters:");
        String myString = scan.nextLine();

        System.out.println("Please Input a Password:");

        String passw = scan.nextLine();

        SecretKeyFactory MyKeyFactory = SecretKeyFactory.getInstance("DES");
        byte[]           mybytes      = myString.getBytes("UTF8");
        DESKeySpec       myMaterial   = new DESKeySpec(mybytes);
        SecretKey        myDESkey     = MyKeyFactory.generateSecret(myMaterial);

        Cipher desCipher = Cipher.getInstance("DES");
        desCipher.init(Cipher.ENCRYPT_MODE, myDESkey);
        byte[] myEncryptedBytes = desCipher.doFinal(mybytes);
        System.out.println(Arrays.toString(myEncryptedBytes));

        desCipher.init(Cipher.DECRYPT_MODE, myDESkey);
        byte[] myDecryptedBytes = desCipher.doFinal(mybytes);
        System.out.println(Arrays.toString(myDecryptedBytes));
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-08 01:32:45

一种方法是使用基于密码的加密技术。

您可以找到示例代码片段here

基本上,您将密码字符与盐一起散列,并将结果用作加密密钥。散列确保无论密码的长度如何,都可以使用加密所需的位数。

在任何情况下,通过输入验证来强制使用强密码总是一个好主意。

通常,强密码(自2018年起)被视为包含大小写字符的8+字符,以及少量特殊字符(例如:-、_、%、$、#、@)和数字。

PS:上面的链接是用于AES加密的,但是你应该能够使它适合于DES (使用MD5而不是SHA-256)。

使用DES进行基于密码的加密的另一个示例可以在here中找到。

问候

拉文德拉

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52690952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档