问题描述
明文:12345678秘钥:12345678909876543212345678909876进过计算出来的密文:iGNoZSrV2gnYK7x4ogdzdQ==我现在想让这个密文显示成由0到9,A到F里面的数组成的16位的密文。求解应该怎么弄。最好有代码谢谢各位啦!
解决方案
解决方案二:
急求,在线等
解决方案三:
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Security.Cryptography;usingSystem.IO;namespaceCaoGao{///<summary>///加解密类///</summary>publicclassEncryptHelper{//构造一个对称算法privateSymmetricAlgorithmmCSP=newTripleDESCryptoServiceProvider();#region加密解密函数///<summary>///字符串的加密///</summary>///<paramname="Value">要加密的字符串</param>///<paramname="sKey">密钥,必须32位</param>///<paramname="sIV">向量,必须是12个字符</param>///<returns>加密后的字符串</returns>publicstringEncryptString(stringValue,stringsKey,stringsIV){try{ICryptoTransformct;MemoryStreamms;CryptoStreamcs;byte[]byt;mCSP.Key=Convert.FromBase64String(sKey);mCSP.IV=Convert.FromBase64String(sIV);//指定加密的运算模式mCSP.Mode=System.Security.Cryptography.CipherMode.ECB;//获取或设置加密算法的填充模式mCSP.Padding=System.Security.Cryptography.PaddingMode.PKCS7;ct=mCSP.CreateEncryptor(mCSP.Key,mCSP.IV);//创建加密对象byt=Encoding.UTF8.GetBytes(Value);ms=newMemoryStream();cs=newCryptoStream(ms,ct,CryptoStreamMode.Write);cs.Write(byt,0,byt.Length);cs.FlushFinalBlock();cs.Close();returnConvert.ToBase64String(ms.ToArray());}catch(Exceptionex){//MessageBox.Show(ex.Message,"出现异常",MessageBoxButtons.OK,MessageBoxIcon.Warning);return("输入的秘钥有误!"+ex.Message);}}///<summary>///解密字符串///</summary>///<paramname="Value">加密后的字符串</param>///<paramname="sKey">密钥,必须32位</param>///<paramname="sIV">向量,必须是12个字符</param>///<returns>解密后的字符串</returns>publicstringDecryptString(stringValue,stringsKey,stringsIV){try{ICryptoTransformct;//加密转换运算MemoryStreamms;//内存流CryptoStreamcs;//数据流连接到数据加密转换的流byte[]byt;//将3DES的密钥转换成bytemCSP.Key=Convert.FromBase64String(sKey);//将3DES的向量转换成bytemCSP.IV=Convert.FromBase64String(sIV);mCSP.Mode=System.Security.Cryptography.CipherMode.ECB;mCSP.Padding=System.Security.Cryptography.PaddingMode.PKCS7;ct=mCSP.CreateDecryptor(mCSP.Key,mCSP.IV);//创建对称解密对象byt=Convert.FromBase64String(Value);ms=newMemoryStream();cs=newCryptoStream(ms,ct,CryptoStreamMode.Write);cs.Write(byt,0,byt.Length);cs.FlushFinalBlock();cs.Close();returnEncoding.UTF8.GetString(ms.ToArray());}catch(Exceptionex){//MessageBox.Show(ex.Message,"出现异常",MessageBoxButtons.OK,MessageBoxIcon.Warning);return("输入的秘钥有误!"+ex.Message);}}#endregion}}这是我的代码
解决方案四:
你既然用3DES加密,密文当然就是这样的你想要16进制数的密文,改用MD5加密啊.否则还用加密算法干什么,自己做个加密得了,否则费两遍事
解决方案五:
3DES加密,密文是24位,而且是数字+字母+等号,相当于37进制而你要转成16位16进制数,必然损失精度,导致无法还原
解决方案六:
引用3楼Z65443344的回复:
你既然用3DES加密,密文当然就是这样的你想要16进制数的密文,改用MD5加密啊.否则还用加密算法干什么,自己做个加密得了,否则费两遍事
但是我看有些软件用3DES加密出来的密文就是16进制的啊,这是怎么回事?
解决方案七:
你确定他是用3DES,而不是别的?
解决方案八:
引用5楼ykai_king的回复:
Quote: 引用3楼Z65443344的回复:
你既然用3DES加密,密文当然就是这样的你想要16进制数的密文,改用MD5加密啊.否则还用加密算法干什么,自己做个加密得了,否则费两遍事但是我看有些软件用3DES加密出来的密文就是16进制的啊,这是怎么回事?
是啊上面加密方式是自己选的我点的3des出来的就是16进制的啊
解决方案九:
引用7楼ykai_king的回复:
Quote: 引用5楼ykai_king的回复:
Quote: 引用3楼Z65443344的回复:
你既然用3DES加密,密文当然就是这样的你想要16进制数的密文,改用MD5加密啊.否则还用加密算法干什么,自己做个加密得了,否则费两遍事但是我看有些软件用3DES加密出来的密文就是16进制的啊,这是怎么回事?
是啊上面加密方式是自己选的我点的3des出来的就是16进制的啊
你去看看这个也行http://bbs.csdn.net/topics/390514420
解决方案十:
byte[]buff=cs.ToArray()stringresult=BitConverter.ToString(buff);请仔细看回你的代码,是自己把16进制转字符串的:Convert.ToBase64String(ms.ToArray());
解决方案十一:
引用9楼CGabriel的回复:
byte[]buff=cs.ToArray()stringresult=BitConverter.ToString(buff);请仔细看回你的代码,是自己把16进制转字符串的:Convert.ToBase64String(ms.ToArray());
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊
解决方案十二:
引用10楼ykai_king的回复:
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊
简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接
解决方案十三:
引用11楼Z65443344的回复:
Quote: 引用10楼ykai_king的回复:
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接
replace("-","")这两个参数是什么?
解决方案十四:
引用12楼ykai_king的回复:
Quote: 引用11楼Z65443344的回复:
Quote: 引用10楼ykai_king的回复:
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接
replace("-","")这两个参数是什么?
就是把字符串中的“-”替换成“”空格了,你也可设置能“”,这样就没有“-”了。lz连replace("-","")都看不明白,就让lz写加密的东西,难为lz了
解决方案十五:
引用13楼mjp1234airen4385的回复:
Quote: 引用12楼ykai_king的回复:
Quote: 引用11楼Z65443344的回复:
Quote: 引用10楼ykai_king的回复:
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接
replace("-","")这两个参数是什么?
就是把字符串中的“-”替换成“”空格了,你也可设置能“”,这样就没有“-”了。lz连replace("-","")都看不明白,就让lz写加密的东西,难为lz了
我就不是搞软件的,但是硬件上要用,看不懂也得搞出来
解决方案:
引用14楼ykai_king的回复:
Quote: 引用13楼mjp1234airen4385的回复:
Quote: 引用12楼ykai_king的回复:
Quote: 引用11楼Z65443344的回复:
Quote: 引用10楼ykai_king的回复:
现在改过来了但是出来的结果变成:88-63-68-65-2A-D5-DA-09-D8-2B-BC-78-A2-07-73-75这也不对啊。求帮助啊简单点,做个替换:string.replace("-","");复杂点,自己循环数组,tostring,拼接
replace("-","")这两个参数是什么?
就是把字符串中的“-”替换成“”空格了,你也可设置能“”,这样就没有“-”了。lz连replace("-","")都看不明白,就让lz写加密的东西,难为lz了
我就不是搞软件的,但是硬件上要用,看不懂也得搞出来
100个赞。
解决方案:
本身3DES加密后拿到的就是一个byte数组,你直接循环数组,每个字节ToString("X2"),最后合起来就是你要的。你的这个结果是经过Base64编码后的。
解决方案:
假设你本来的代码…………cs.FlushFinalBlock();byte[]outbuffer=ms.ToArray();returnSystem.Convert.ToBase64String(outbuffer);改为…………cs.FlushFinalBlock();byte[]outbuffer=ms.ToArray();StringBuildersb=newStringBuilder();for(inti=0;i<outbuffer.Length;i++){sb.Append(outbuffer[i].ToString("X2"));}returnsb.ToString();