MessageDigest的更新方法做什么以及BASE64Encoder的用途是什么?

pro*_*eve 8 java encryption cryptography

以下是将加密用户String的代码:

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
import java.io.*;

class Encrypter {
public synchronized String encrypt(String plainText) throws Exception {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA");
    }catch(Exception exc) {
        throw new Exception(exc.getMessage());
     }

     try {
        md.update(plainText.getBytes("UTF-8"));
     }catch(Exception exc) {
        throw new Exception(exc.getMessage());
      }

      byte raw[] = md.digest();
      String hash = (new BASE64Encoder()).encode(raw);
      return hash;
}
public static void main(String args[]) {
    try {
        Encrypter encrypter = new Encrypter();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String userInput = br.readLine();
        String encryptedPassword = encrypter.encrypt(userInput);
        System.out.println(encryptedPassword);
    } catch(Exception exc) {
        System.out.println(exc);
      }
}
}
Run Code Online (Sandbox Code Playgroud)

当我编译代码时,我得到这些警告:

Encrypter.java:4: warning: BASE64Encoder is internal proprietary API and may be removed in a future release
import sun.misc.BASE64Encoder;
           ^
Encrypter.java:23: warning: BASE64Encoder is internal proprietary API and may be removed in a future release
              String hash = (new BASE64Encoder()).encode(raw);
                                 ^
2 warnings
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来加密java中的字符串?

update班级的方法是MessageDigest做什么的?即声明的作用md.update(plainText.getBytes("UTF-8"));是什么?

什么是BASE64Encoder课程?我找不到它的DOC

Sah*_*hoo 14

  1. 首先,您没有执行任何加密.您正在计算输入的单向散列或摘要.此哈希稍后可用于验证消息的完整性.请参阅散列,SHA1MessageDigest.

  2. Base64编码是一种用ASCII表示二进制数据的方法.这通常是可取的,因为并非所有数据存储和传输机制都支持原始二进制.例如,如果要通过http查询字符串参数传输计算摘要,则需要将其编码为Base64.另外,将原始二进制文件保存或打印到控制台会产生一系列时髦字符,这些字符可能超出可打印范围,并且还可能会从PC扬声器发出蜂鸣声!

  3. Base64Encoder你使用来自sun.misc包,不应该被使用.这是内部Sun JVM代码,将来可能会或可能不会提供.这也解释了为什么你无法找到任何javadoc.

  4. 幸运的是,存在一些免费且开放的Base64编码器和解码器.Apache Commons Codec是一个广泛使用且稳定的库,包含几个包含Base64的编解码器.

  5. md.update(plainText.getBytes("UTF-8"))更新摘要的输入.调用digest执行最终更新并计算输入的摘要.参见md.digest和的javadocmd.update