1 要求如下:
.密钥是一个长度16、由16进制字符组成的字符串,如:1234567890ABCDEF
使用时,相临的两位理解为一个16进制数的明文,然后转换为实际使用的8位密钥
2. 待加密数据按照PKCS5规则进行补位。(缺7位补7个0x07,缺6位则补6个0x06,以次类推,如果正好8位,也需要补8个0x08)
3. 实际加密模式选择DES-ECB
4. 经过DES加密后的数据必须通过Base64编码转换为明文的字符串
请问谁有.net的DES加解密源代码,在线等,立马给分。
.密钥是一个长度16、由16进制字符组成的字符串,如:1234567890ABCDEF
使用时,相临的两位理解为一个16进制数的明文,然后转换为实际使用的8位密钥
2. 待加密数据按照PKCS5规则进行补位。(缺7位补7个0x07,缺6位则补6个0x06,以次类推,如果正好8位,也需要补8个0x08)
3. 实际加密模式选择DES-ECB
4. 经过DES加密后的数据必须通过Base64编码转换为明文的字符串
请问谁有.net的DES加解密源代码,在线等,立马给分。
private void GetKeyIV(out byte[] key, out byte[] iv)
{
byte[] buf = Convert.FromBase64String(this.ShareKey);
key = new byte[8];
iv = new byte[8];
Array.Copy(buf, 0, key, 0, key.Length);
Array.Copy(buf, key.Length, iv, 0, iv.Length);
}
现在是想如何得到正确的 key 和 iv ,对方给的密钥是一个长度16、由16进制字符组成的字符串,如:1234567890ABCDEF ,所以上述方法得不到正确的Key和IV。
不过不能达到你说的加密算法供参考;你说的算法等待高手来解答后学习吧。
/// <summary>
/// 密码加密
/// </summary>
/// <param name="data">要加密的字符串 </param>
/// <returns></returns>
public string EnCode(string data)
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
int i = cryptoProvider.KeySize;
MemoryStream ms = new MemoryStream();
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey,
byIV), CryptoStreamMode.Write); StreamWriter sw = new StreamWriter(cst);
sw.Write(data);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
} /// <summary>
/// 密码解密
/// </summary>
/// <param name="str">要解密的字符串</param>
/// <returns></returns>
public string DeCode(string data)
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); byte[] byEnc;
try
{
byEnc = Convert.FromBase64String(data);
}
catch
{
return null;
} DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(byEnc);
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey,
byIV), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cst);
return sr.ReadToEnd();
}
.密钥是一个长度16、由16进制字符组成的字符串,如:1234567890ABCDEF
使用时,相临的两位理解为一个16进制数的明文,然后转换为实际使用的8位密钥 哪位大侠有相应算法,可以吗1234567890ABCDEF转换成DES使用的密钥?!
byte[] key = ASCIIEncoding.ToBytes("1234567890ABCDEF");希望不会超长