中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

java~和(he).net相通的DES-ECB加解密技術

起因

首(shou)先,對于一個公(gong)司,即有(you).net又有(you)java開發來(lai)說,加解(jie)密是(shi)需(xu)要相互(hu)打通的(de),因為,根據莫非定律你遲早(zao)會有(you)“.net加密讓java解(jie)密“的(de)情況(kuang)。

.net實現

public static string Encrypt(SymmetricAlgorithm algorithm, string plaintext, string key)
  {
      TripleDESCryptoServiceProvider tripleDes = new TripleDESCryptoServiceProvider();
      MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();
      algorithm.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
      algorithm.Mode = CipherMode.ECB;
      Console.WriteLine("IV=" + Convert.ToBase64String(algorithm.IV));
      ICryptoTransform transformer = algorithm.CreateEncryptor();
      byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(plaintext);
      byte[] result = transformer.TransformFinalBlock(Buffer, 0, Buffer.Length);
      return Convert.ToBase64String(result);
  }

.net和java的幾個不同

  1. byte類型對于.net是(0255),而java來說它是有符號的,是(-128127)
  2. 對于DES來說,默認的java支持的密鑰是8字節,而.net里algorithm.Key是16個字節,所以用原生Java的des是不能和.net互通的

java實現

需要第三方(fang)包bcprov-jdk15on

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.64</version>
    <scope>compile</scope>
</dependency>

實現(xian)與(yu).net互(hu)通的加(jia)密過程(cheng)

private static final String ALGORITHM = "DESede";
private static final String CIPHER_TRANSFER = "DESede/ECB/PKCS5Padding";
private static final String ENCODING = "UTF-8";
static {
         init();
}

public static void init() {
    BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider();
    Security.addProvider(bouncyCastleProvider);
}
 /**
   * 初始化key.
   *
   * @param key
   */
  @SneakyThrows
  static SecretKey getSecretKey(String key) {
      MessageDigest md5 = MessageDigest.getInstance("MD5");
      byte[] bkeys = md5.digest(key.getBytes());
      SecretKey secretKey = new SecretKeySpec(bkeys, ALGORITHM);
      return secretKey;
  }

  /**
   * 字符串加密.
   *
   * @param plainText
   * @param key
   * @return
   * @throws Exception
   */
  @SneakyThrows
  public static String encryptToBase64(String plainText, String key) {
      SecretKey secretKey = getSecretKey(key);
      Cipher cipher = Cipher.getInstance(CIPHER_TRANSFER);
      cipher.init(Cipher.ENCRYPT_MODE, secretKey);
      byte[] result = cipher.doFinal(plainText.getBytes(ENCODING));
      String s1 = Base64.encodeBase64String(result);
      return s1;
  }

上面代碼(ma),主(zhu)要是對于(yu)key的(de)生成要注意(yi),使用了與.net相同的(de)md5對原始key進行的(de)加(jia)密(mi),保存它是16個字節。

posted @ 2021-02-23 20:30  張占嶺  閱讀(579)  評論(0)    收藏  舉報