请懂.net的帮忙翻译一段代码

51Crack 2014-06-03 02:18:42
DES加解密码字符串,请翻译成java代码,正在写android程序,需要和电脑的加密算法一致,请高手帮忙!

''' <summary>
''' 加密字符串
''' </summary>
Public Function EnString(ByVal Text As String, ByVal keyStr As String) As String
Try
Dim des As New DESCryptoServiceProvider
Dim inputByteArray() As Byte
inputByteArray = Encoding.UTF8.GetBytes(Text)
des.Key = ASCIIEncoding.ASCII.GetBytes("12345678")
des.IV = ASCIIEncoding.ASCII.GetBytes("12345678")
Dim ms As New System.IO.MemoryStream
Dim cs As New CryptoStream(ms, des.CreateEncryptor, CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Dim ret As New StringBuilder
Dim b As Byte
For Each b In ms.ToArray
ret.AppendFormat("{0:X2}", b)
Next
Return ret.ToString
Catch ex As Exception
Return "EnStrError"
End Try
End Function

''' <summary>
''' 解密字符串
''' </summary>
Public Function DeString(ByVal Text As String, ByVal keyStr As String) As String
Try
If Text = "" Then Return ""
Dim des As New DESCryptoServiceProvider
Dim len As Integer
len = Text.Length / 2 - 1
Dim inputByteArray(len) As Byte
Dim x, i As Integer
For x = 0 To len
i = Convert.ToInt32(Text.Substring(x * 2, 2), 16)
inputByteArray(x) = CType(i, Byte)
Next
des.Key = ASCIIEncoding.ASCII.GetBytes("12345678")
des.IV = ASCIIEncoding.ASCII.GetBytes("12345678")
Dim ms As New System.IO.MemoryStream
Dim cs As New CryptoStream(ms, des.CreateDecryptor, CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Encoding.UTF8.GetString(ms.ToArray)
Catch ex As Exception
Return "DeStrError"
End Try
End Function
...全文
343 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2014-06-06
  • 打赏
  • 举报
回复
参考这篇文章 相关VB代码,用等价的C#测试过,至少这几个main方法中测试结果是一致的。
shine333 2014-06-06
  • 打赏
  • 举报
回复

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

public class DESCrypt {

  private static final char[] HEX_CHAR = new char[] {
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
      'E', 'F'
  };

  public static String encrypt(String text, String key) {
    try {
      DESKeySpec ks = new DESKeySpec("12345678".getBytes("ASCII"));
      SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
      SecretKey sk = skf.generateSecret(ks);
      Cipher cip = Cipher.getInstance("DES/CBC/PKCS5Padding");
      IvParameterSpec iv2 = new IvParameterSpec("12345678".getBytes("ASCII"));
      cip.init(Cipher.ENCRYPT_MODE, sk, iv2);
      byte[] bytes = cip.doFinal(text.getBytes("UTF-8"));
      return toHexString(bytes);
    } catch (Exception ex) {
      return "EnStrError"; // 还是直接抛异常好
    }
  }

  public static String decrypt(String text, String key) {
    try {
      DESKeySpec ks = new DESKeySpec("12345678".getBytes("ASCII"));
      SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
      SecretKey sk = skf.generateSecret(ks);
      Cipher cip = Cipher.getInstance("DES/CBC/PKCS5Padding");
      IvParameterSpec iv2 = new IvParameterSpec("12345678".getBytes("ASCII"));
      cip.init(Cipher.DECRYPT_MODE, sk, iv2);
      byte[] bytes = new byte[text.length() >> 1];
      for (int i = 0, pos = 0; i < bytes.length; i++, pos += 2) {
        bytes[i] = (byte)Integer.parseInt(text.substring(pos, pos+2), 16);
      }
      byte[] decrypt = cip.doFinal(bytes);
      return new String(decrypt, "UTF-8");
    } catch (Exception ex) {
      return "DeStrError"; 
    }
  }

  private static String toHexString(byte[] bytes) {
    int len = bytes.length << 1;
    char[] chars = new char[len];
    for (int i = 0, pos = 0; i < bytes.length; i++, pos += 2) {
      int unsignedByte = bytes[i] & 0xFF;
      chars[pos] = HEX_CHAR[unsignedByte >> 4];
      chars[pos + 1] = HEX_CHAR[unsignedByte & 0xF];
    }
    return new String(chars);
  }

  public static void main(String[] args) throws Exception {
    String[] tests = new String[] {
        "abcd",
        "1234567890",
        "Hello World!",
        "你好,世界!"
    };
    for (String test : tests) {
      System.out.println(test);
      String encrypt = encrypt(test, "");
      System.out.println(encrypt);
      String decrypt = decrypt(encrypt, "");
      System.out.println(decrypt);
    }
    System.out.println(encrypt("abcd", ""));
    System.out.println(encrypt("Hello World!", ""));
    System.out.println(encrypt("你好,世界!", ""));
  }
}
51Crack 2014-06-03
  • 打赏
  • 举报
回复
版主不要乱移版块,我要翻译成java代码,当然在这个区
51Crack 2014-06-03
  • 打赏
  • 举报
回复
引用 1 楼 thc1987 的回复:
DES算法应该都相通的,你先去网上找个JAVA版的,测试下看看,然后对一下结果是否一致
找过了,不一样
moonwrite 2014-06-03
  • 打赏
  • 举报
回复
引用 1 楼 thc1987 的回复:
DES算法应该都相通的,你先去网上找个JAVA版的,测试下看看,然后对一下结果是否一致
+1 要注意的的是编码 关键的地方 inputByteArray = Encoding.UTF8.GetBytes(Text) des.Key = ASCIIEncoding.ASCII.GetBytes("12345678") des.IV = ASCIIEncoding.ASCII.GetBytes("12345678")
M依然 2014-06-03
  • 打赏
  • 举报
回复
vb.net 的写法。真心看起费劲。。 LZ头像好妖艳的感觉
tony4geek 2014-06-03
  • 打赏
  • 举报
回复
头像真漂亮。
tony4geek 2014-06-03
  • 打赏
  • 举报
回复
vb 的写法。
猿敲月下码 2014-06-03
  • 打赏
  • 举报
回复
DES算法应该都相通的,你先去网上找个JAVA版的,测试下看看,然后对一下结果是否一致

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧