关于java和C# MD5加密,问题求助

好的哦 2017-12-04 01:59:51

public String cryptMd5(String source, String key)
{
byte[] k_ipad = new byte[64];
byte[] k_opad = new byte[64];
byte[] keyb;
byte[] value;
try
{
keyb = key.getBytes("UTF-8");
value = source.getBytes("UTF-8");
}
catch (UnsupportedEncodingException e)
{
keyb = key.getBytes();
value = source.getBytes();
}
Arrays.fill(k_ipad, keyb.length, 64, new Integer(54).byteValue());
Arrays.fill(k_opad, keyb.length, 64, new Integer(92).byteValue());
for (int i = 0; i < keyb.length; i++)
{
k_ipad[i] = ((byte)(keyb[i] ^ 0x36));
k_opad[i] = ((byte)(keyb[i] ^ 0x5C));
}
MessageDigest md = null;
try
{
md = MessageDigest.getInstance("MD5");
}
catch (NoSuchAlgorithmException e)
{
return null;
}
md.update(k_ipad);
md.update(value);
byte[] dg = md.digest();
md.reset();
md.update(k_opad);
md.update(dg, 0, 16);
dg = md.digest();
return toHex(dg);
}

public static String toHex(byte[] input)
{
if (input == null) {
return null;
}
StringBuffer output = new StringBuffer(input.length * 2);
for (int i = 0; i < input.length; i++)
{
int current = input[i] & 0xFF;
if (current < 16) {
output.append("0");
}
output.append(Integer.toString(current, 16));
}
return output.toString();
}

其中source是待加密字符串,key是密钥。
这是java代码,使用key MD5加密字符串。
貌似C#只能直接MD5加密字符串。
要实现这样的加密方法,求解决方案。
...全文
277 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
好的哦 2017-12-07
  • 打赏
  • 举报
回复
解决,还是自己查java方法的作用用C#去实现
  • 打赏
  • 举报
回复
有Key值,所以你可以去看下net下的HMACMD5是不是对应
好的哦 2017-12-04
  • 打赏
  • 举报
回复
@xomix 看来我这想法行不通,还是谢谢你
  • 打赏
  • 举报
回复
引用 2 楼 u012401478 的回复:
@xomix 是这样,但是我对java不熟悉,相应的C#需要用哪些方法来代替其中的功能呢
不,你要做的不是对java熟悉,是找到这个模块的开发要求自己用C#实现啊
好的哦 2017-12-04
  • 打赏
  • 举报
回复
@xomix 是这样,但是我对java不熟悉,相应的C#需要用哪些方法来代替其中的功能呢
  • 打赏
  • 举报
回复
引用 楼主 u012401478 的回复:

public String cryptMd5(String source, String key)
  {
    byte[] k_ipad = new byte[64];
    byte[] k_opad = new byte[64];
    byte[] keyb;
    byte[] value;
    try
    {
      keyb = key.getBytes("UTF-8");
      value = source.getBytes("UTF-8");
    }
    catch (UnsupportedEncodingException e)
    {
      keyb = key.getBytes();
      value = source.getBytes();
    }
    Arrays.fill(k_ipad, keyb.length, 64, new Integer(54).byteValue());
    Arrays.fill(k_opad, keyb.length, 64, new Integer(92).byteValue());
    for (int i = 0; i < keyb.length; i++)
    {
      k_ipad[i] = ((byte)(keyb[i] ^ 0x36));
      k_opad[i] = ((byte)(keyb[i] ^ 0x5C));
    }
    MessageDigest md = null;
    try
    {
      md = MessageDigest.getInstance("MD5");
    }
    catch (NoSuchAlgorithmException e)
    {
      return null;
    }
    md.update(k_ipad);
    md.update(value);
    byte[] dg = md.digest();
    md.reset();
    md.update(k_opad);
    md.update(dg, 0, 16);
    dg = md.digest();
    return toHex(dg);
  }
  
  public static String toHex(byte[] input)
  {
    if (input == null) {
      return null;
    }
    StringBuffer output = new StringBuffer(input.length * 2);
    for (int i = 0; i < input.length; i++)
    {
      int current = input[i] & 0xFF;
      if (current < 16) {
        output.append("0");
      }
      output.append(Integer.toString(current, 16));
    }
    return output.toString();
  }
其中source是待加密字符串,key是密钥。 这是java代码,使用key MD5加密字符串。 貌似C#只能直接MD5加密字符串。 要实现这样的加密方法,求解决方案。
这不是组合方法都给你写清楚了吗,先组合后加密啊,他也没有直接调用Java的MD5带密码加密啊……这是自有加密方法,不是语言特有。

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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