Base64,TripledDES加密解密问题
问题:在进行解密的过程中仅仅执行到Base64Decode的步骤就出问题了(全是乱码)
基本模式:EncodeStr = URLEncoding(Base64(Encrypt( 未加密串 ))) 密钥:zjdh38ds
环境:对方java,我是C#
我事先已经自己访问自己测试通过了。
自己实现EncodeStr = URLEncoding(Base64(Encrypt( 未加密串 )))
然后自己对这个字符串进行解密
解密步骤:
1,URLEncoding
2,Base64
3,Decrypt
可以完全通过,没有任何错误和乱码。
但在与对方通信,通过HTTP协议。测试的时候发现:
在我把对方的串(91gTJ3pKqTvogitNne6BHmP0yEZAqKSvgHm7/pQcvTRa0ffv9rhq2rhfFyTojyzIObCW7eqkuEs=)拿过来解析的时候 仅仅执行到 Base64 这一步骤就出现错误,全是乱码 -- 请问如何解决这一问题。
我所使用的代码:
/// <summary>
/// 解密方法
/// </summary>
/// <param name="content">需要解密的密文内容</param>
/// <param name="secret">解密密钥</param>
/// <returns>返回解密后明文字符串</returns>
public static string Decrypt(string content,string secret)
{
if ((content == null) || (secret == null) || (content.Length == 0) || (secret.Length == 0))
throw new ArgumentNullException("Invalid Argument");
try
{
byte[] Key = TicketTool.GetKey(secret);
byte[] CryByte = TicketTool.Base64Decode(Encoding.ASCII.GetBytes(content));
byte[] DecByte = TicketTool.Decrypt(CryByte,Key);
byte[] RealDecByte;
string RealDecStr;
RealDecByte = DecByte;
byte[] Prefix = new byte[Constants.Operation.UnicodeReversePrefix.Length];
if (RealDecByte.Length >= 2)
{
Array.Copy(RealDecByte,Prefix,2);
if (TicketTool.CompareByteArrays(Constants.Operation.UnicodeReversePrefix,Prefix))
{
byte SwitchTemp = 0;
for (int i = 0; i < RealDecByte.Length - 1; i = i + 2)
{
SwitchTemp = RealDecByte[i];
RealDecByte[i] = RealDecByte[i + 1];
RealDecByte[i + 1] = SwitchTemp;
}
}
}
RealDecStr = Encoding.Unicode.GetString(RealDecByte);
return RealDecStr;
}
catch(Exception e)
{
throw e;
}
}
各种对Base64进行解码的函数我也都实验了(网上有很多对Base64进行解码的函数,有自写的,也有对系统函数调用的。),统统无效(无法解析对方的串,而我自己生成的串能正常解析),拿出一个函数例子:
public string DecodeBase64(string code_type,string code)
{
string decode = "";
byte[] bytes = Convert.FromBase64String(code);
try
{
decode = Encoding.GetEncoding(code_type).GetString(bytes);
}
catch(System.Exception ex)
{
Console.WriteLine(ex.ToString());
decode = code;
}
return decode;
}