我现在在做一个程序需要从客户机获取机器信息,生成附件发到厂商,
厂商通过一个注册码生成器生成一个注册码,该注册码的输入端数据包括客户机机器信息以及授权使用期限及权限,
然后客户机端程序通过对注册码解码判别其权限,使用周期及机器信息来限制该客户端软件的使用
现在机器信息已经可以获取
但是我不知道应该用哪种加密方式来生成注册码并解码?
是否需要非对称加密?
是否有别的方式可以达到相同的效果?
(该软件并不需要经常连接服务器,主要是单机操作,而且客户是全球用户,服务器是在中国)
厂商通过一个注册码生成器生成一个注册码,该注册码的输入端数据包括客户机机器信息以及授权使用期限及权限,
然后客户机端程序通过对注册码解码判别其权限,使用周期及机器信息来限制该客户端软件的使用
现在机器信息已经可以获取
但是我不知道应该用哪种加密方式来生成注册码并解码?
是否需要非对称加密?
是否有别的方式可以达到相同的效果?
(该软件并不需要经常连接服务器,主要是单机操作,而且客户是全球用户,服务器是在中国)
解决方案 »
- 请教一下关于可空参数的问题
- 关于File的Move方法
- vc++传结构体到C#中,为啥C#中的值 老是一样的!!
- Assembly.GetExecutingAssembly是什么意思?
- 请问网站的B/S结构和用友金蝶的一般B/S结构财务软件有什么区别?
- 关于c#写的com/com+组件
- 如何从文本里取得我要的数据库连接字符串?
- 小偷程序之搜索页面的内容问题
- 类中的提示信息
- 正在写一个SSL的Socket程序,关于证书的问题,请大家帮忙看看
- while((j<Tlength)&(S[i+k]=T[j]))???
- 郁闷:<,单位好多机器,相同的cs程序,会出现同一sql语句有的出错,有的不出错的问题!!!(sos)
* Copyright(C) 2004-2005 ******** All Rights Reserved.
************************************************************************/using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Web;
using System.Windows.Forms;
/// <summary>
/// Triple Data Encryption Standard algorithms implementations
/// </summary>
/// <Author>Yao</Author>
/// <Date>2005/4/20</Date>public class CryptionData
{
// The length of Encryptionstring should be 8 byte and not be a weak key
private string EncryptionString;// The length of initialization vector should be 8 byte
private static Byte[] EncryptionIV = Encoding.Default.GetBytes("abcdefgh");/// <summary>
/// Constructor
/// </summary>
public CryptionData()
{
}/// <summary>
/// Constructor
/// </summary>
/// <param name="EncryptionString">SecureKey</param>
public CryptionData(string EncryptionString)
{
this.EncryptionString = EncryptionString;
}/// <summary>
/// Encryption method for byte array
/// </summary>
/// <param name="SourceData">source data</param>
/// <returns>byte array</returns>
public byte[] EncryptionByteData(byte[] SourceData)
{
byte[] returnData = null;
try
{
// Create DESCryptoServiceProvider object
DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();// Set SecureKey and IV of desProvider
byte[] byteKey = Encoding.Default.GetBytes(EncryptionString);
desProvider.Key = byteKey;
desProvider.IV = EncryptionIV;// A MemoryStream object
MemoryStream ms = new MemoryStream();// Create Encryptor
ICryptoTransform encrypto = desProvider.CreateEncryptor();// Create CryptoStream object
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);// Encrypt SourceData
cs.Write(SourceData,0,SourceData.Length);
cs.FlushFinalBlock();// Get Encryption result
returnData = ms.ToArray();
}
catch(Exception ex)
{
throw ex;
}return returnData;}/// <summary>
/// Decryption method for byte array
/// </summary>
/// <param name="SourceData">source data</param>
/// <returns>byte array</returns>
public byte[] DecryptionByteData(byte[] SourceData)
{
byte[] returnData = null;
try
{
// Create DESCryptoServiceProvider object
DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();// Set SecureKey and IV of desProvider
byte[] byteKey = Encoding.Default.GetBytes(EncryptionString);
desProvider.Key = byteKey;
desProvider.IV = EncryptionIV;// A MemoryStream object
MemoryStream ms = new MemoryStream();// Create Decryptor
ICryptoTransform encrypto = desProvider.CreateDecryptor();// Create CryptoStream object
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);// Decrypt SourceData
cs.Write(SourceData, 0, SourceData.Length);
cs.FlushFinalBlock();// Get Decryption result
returnData = ms.ToArray();
}
catch(Exception ex)
{
throw ex;
}
return returnData;}/// <summary>
/// Encryption method for string
/// </summary>
/// <param name="SourceData">source data</param>
/// <returns>string</returns>
public string EncryptionStringData(string SourceData)
{
try
{
// Convert source data from string to byte array
byte[] SourData = Encoding.Default.GetBytes(SourceData);// Encrypt byte array
byte[] retData = EncryptionByteData(SourData);// Convert encryption result from byte array to Base64String
return Convert.ToBase64String(retData, 0, retData.Length);
}
catch(Exception ex)
{
throw ex;
}
}/// <summary>
/// Decryption method for string
/// </summary>
/// <param name="SourceData">source data</param>
/// <returns>string</returns>
public string DecryptionStringdata(string SourceData)
{
try
{
// Convert source data from Base64String to byte array
byte[] SourData = Convert.FromBase64String(SourceData);// Decrypt byte array
byte[] retData = DecryptionByteData(SourData);// Convert Decryption result from byte array to string
return Encoding.Default.GetString(retData, 0, retData.Length);
}
catch(Exception ex)
{
throw ex;
}
}
}我写的这个类,加密字符串和字节数组的。
这是最初开发的一个类,加密字节数组这个方法是用来加密小的图像文件的。把图像读到字节数组中,就可以解密解密了。后来改造过一次,加密字符串用的是TripleDES,加密图像,因为速度的关系采用DES算法的。
明天准备把程序分离成注册机和客户验证部分。
做好了把代码贴出来分享一下!
楼上先谢过!