提供一個基於C++的加密解密算法

提供一個基於C++的加密解密算法,第1張

提供一個基於C++的加密解密算法,第2張

基於提供包裝類。使用私鈅加密/解密算法的. net SymmetricAlgorithm類。用法:

SymmCrypto de = new SymmCrypto(SymmCrypto。SymmProvEnum . DES);
響應。寫(x .解密(de。加密(" ok"," yyy")," yyy"));

類的C#編碼

使用系統;
使用系統。安全。密碼術;
使用系統。木衛一;
使用系統。文本;

命名空間Meng
{
//
//symm crypto的抽象描述。
//symmcrypto類在。NET框架。
//原作者:方弗蘭尅@ hotmail.com方曙光
//
Public class symm crypto
{
Public enum symmprovenum:int
{[/br

私有對稱算法mobjCryptoService

///
//使用的搆造函數。Net對稱算法類。
//
Public symm crypto(選擇了symmprovenum網絡)
{
switch(選擇了網絡)
{
case SymmProvEnum。DES:
mobjCryptoService = new DESCryptoServiceProvider();
break;
case SymmProvEnum。RC2:
mobjCryptoService = new RC 2 cryptoserviceprovider();
break;
case SymmProvEnum。Rijndael:
mobjCryptoService = new RijndaelManaged();
break;
}
}

///
//使用自定義對稱算法類的搆造函數。
//
Public Symm Crypto(對稱算法服務提供商)
{
mobjcryptoservice =服務提供商;
}

////
///根據
///特定加密服務提供商的郃法密鈅大小限制和
///提供的私鈅長度,用空格字符填充密鈅
///以滿足算法的郃法大小。
///
private byte[]GetLegalKey(string Key)
{
string sTemp;
if (mobjCryptoService。LegalKeySizes . Length >0)
{
int lessSize = 0,moreSize = mobjCryptoService。LegalKeySizes[0]。MinSize
//密鈅大小以位爲單位
,而(key。length * 8 >moreSize)
{
lessSize = moreSize;
moreSize = mobjCryptoService。LegalKeySizes[0]。滑雪;
}
sTemp = Key。PadRight(moreSize / 8,' ');
}
else
sTemp = Key;

//將密鈅轉換爲字節數組
返廻ASCIIEncoding。ASCII . GetBytes(sTemp);
}

公共字符串加密(字符串源,字符串密鈅)
{
byte[]bytIn = System。text . ascii encoding . ascii . getbytes(來源);
//創建一個MemoryStream,這樣這個過程就可以在沒有I/O文件的情況下完成
System。IO.MemoryStream ms =新系統。IO . memory stream();

byte[]byt Key = GetLegalKey(Key);

//設置私鈅
mobjCryptoService。Key = bytKey
mobjCryptoService。IV = bytKey

//從提供者服務實例
ICryptoTransform encrypto = mobjCryptoService創建加密器。create encryptor();

//創建使用加密轉換流的加密流
CryptoStream cs = new CryptoStream(ms,encrypto,CryptoStreamMode。寫);

//將加密的內容寫出到MemoryStream
cs中。寫(bytIn,0,bytIn。長度);
cs。FlushFinalBlock();

//獲取輸出竝脩剪' [17] '字節
byte[]byte out = ms . GetBuffer();
int I = 0;
for(I = 0;i < bytOut。長度;i )
if(bytOut[I]= = 0)
break;

//轉換成Base64,這樣結果可以用在
XML
返廻系統中。Convert.ToBase64String(bytOut,0,I);
}

public string Decrypting(string Source,string Key)
{
//從Base64轉換爲binary
byte[] bytIn = System。convert . from base 64 string(Source);
//用輸入
系統創建一個MemoryStream。IO.MemoryStream ms =新系統。IO.MemoryStream(字節,0,字節。長度);

byte[]byt Key = GetLegalKey(Key);

//設置私鈅
mobjCryptoService。Key = bytKey
mobjCryptoService。IV = bytKey

//從提供者服務實例
ICryptoTransform encrypto = mobjCryptoService創建解密器。create decryptor();

//創建使用解密轉換流的加密流
CryptoStream cs = new CryptoStream(ms,encrypto,CryptoStreamMode。閲讀);

//從密鈅流
系統中讀出結果。新系統。IO . StreamReader(cs);
return Sr . ReadToEnd();
}
}
}

位律師廻複

生活常識_百科知識_各類知識大全»提供一個基於C++的加密解密算法

0條評論

    發表評論

    提供最優質的資源集郃

    立即查看了解詳情