/// <summary> /// 从nbt数据中获取salt /// </summary> /// <param name="data"></param> /// <param name="is112">是否是1.12版本, 如果是, 那么只需要处理一位数字</param> /// <returns></returns> public static string GetSaltFromNBTByteArray(byte[] data, bool is112) { MemoryStream ms = new MemoryStream(removeLength(data, is112)); TagCompound tag = NBTFile.FromStream(ms); byte[] saltarr = tag.GetByteArray("salt"); string salt = System.Text.Encoding.UTF8.GetString(saltarr); if (saltarr.Length > 100) { salt = ASACUtil.RSADecodeSalt(saltarr); } return(salt); }
/// <summary> /// 从nbt数据中心获取md5字符串列表 /// </summary> /// <param name="data"></param> /// <returns></returns> public static List <string> GetMd5ListFromNBTByteArray(byte[] data, bool is112) { List <string> md5s = new List <string>(); MemoryStream ms = new MemoryStream(removeLength(data, is112)); TagCompound tag = NBTFile.FromStream(ms); TagList taglist = (TagList)tag["md5s"]; foreach (TagByteArray br in taglist) { byte[] bytes = br.Value; if (bytes.Length > 100) { string md5 = ASACUtil.RSADecodeMD5(bytes); md5s.Add(md5); } else { md5s.Add(Encoding.UTF8.GetString(bytes)); } } return(md5s); }
/// <summary> /// 获取nbt数据从md5和salt /// </summary> public static byte[] GetMd5NBTByteArray(bool isUseRSA, List <string> md5s, string salt, bool is112) { TagCompound tagCompound = new TagCompound(); TagList tagList = new TagList(); foreach (string md5 in md5s) { string newMd5 = EncryptionUtil.MD5(md5 + salt); byte[] md5bytes = Encoding.UTF8.GetBytes(newMd5); if (isUseRSA) { md5bytes = ASACUtil.RSAEncodeMD5(md5bytes); } TagByteArray byteArray = new TagByteArray(md5bytes); tagList.Add(byteArray); } tagCompound.Add("md5s", tagList); MemoryStream tagCompoundMS = new MemoryStream(); NBTFile.ToStream(tagCompoundMS, tagCompound, !is112); byte[] tagCompoundByteArray = tagCompoundMS.ToArray(); return(tagCompoundByteArray); }