C# 如何在不使用Chilcat库的情况下解密使用Chilkat进行加密的数据
我们有一个Windows Phone 8应用程序,需要与使用Chilkat加密某些数据的web服务进行通信。据我所知,Chilkat不支持Windows Phone平台。我有密钥和其他有关数据加密方式的信息,如加密算法名称、密钥长度等,但我是否能够在没有此库的情况下在Windows Phone上加密/解密?我们已经有了使用相同服务的android/ios应用程序,它们使用chilkat库对数据进行加密C# 如何在不使用Chilcat库的情况下解密使用Chilkat进行加密的数据,c#,encryption,windows-phone,chilkat,C#,Encryption,Windows Phone,Chilkat,我们有一个Windows Phone 8应用程序,需要与使用Chilkat加密某些数据的web服务进行通信。据我所知,Chilkat不支持Windows Phone平台。我有密钥和其他有关数据加密方式的信息,如加密算法名称、密钥长度等,但我是否能够在没有此库的情况下在Windows Phone上加密/解密?我们已经有了使用相同服务的android/ios应用程序,它们使用chilkat库对数据进行加密 class Program { static readonly string keyS
class Program
{
static readonly string keyString = "MyKey";
static readonly string iv = "MyIV";
static Encoding TheEncoding = Encoding.UTF8;
static void Main(string[] args)
{
//I got Chilkat and BouncyCastle via NuGet
//https://www.nuget.org/packages/WinRTBouncyCastle/0.1.1.1
//chilcat-win32
var original = "clear text";
var chilkatCrypt = GetChilkat3Des();
//this is equalent to an encrypted text I get from the service
var ckEncrypted = chilkatCrypt.EncryptStringENC(original);
var ckDecrypted = chilkatCrypt.DecryptStringENC(ckEncrypted);
if (!string.Equals(original, ckDecrypted)) throw new ArgumentException("chilkat encrypt/decrypt failure...");
//now comes the challenge, to decrypt the Chilkat encryption with BouncyCastle (or what ever crypto lib that runs on WP8)
//this is where i need help :)
byte[] chilkatEncBytes = System.Text.Encoding.UTF8.GetBytes(ckEncrypted);
var bouncyDecrypted = BouncyCastleDecrypt(chilkatEncBytes);
}
public static Chilkat.Crypt2 GetChilkat3Des()
{
var crypt = new Chilkat.Crypt2();
if (!crypt.UnlockComponent("Start my 30-day Trial"))
{
throw new Exception("Unlock Chilkat failed");
}
crypt.CryptAlgorithm = "3des";
crypt.CipherMode = "cbc";
crypt.KeyLength = 192;
crypt.PaddingScheme = 0;
// It may be "hex", "url", "base64", or "quoted-printable".
crypt.EncodingMode = "hex";
crypt.SetEncodedIV(iv, crypt.EncodingMode);
crypt.SetEncodedKey(keyString, crypt.EncodingMode);
return crypt;
}
//this code is more or less copied from here:
//http://nicksnettravels.builttoroam.com/post/2012/03/27/TripleDes-Encryption-with-Key-and-IV-for-Windows-Phone.aspx
public static byte[] RunBouncyCastleTripleDes(byte[] input, bool encrypt)
{
byte[] byteKey = new byte[24];
Buffer.BlockCopy(TheEncoding.GetBytes(keyString), 0, byteKey, 0, TheEncoding.GetBytes(keyString).Length);
var IV = new byte[8];
Buffer.BlockCopy(TheEncoding.GetBytes(iv), 0, IV, 0, TheEncoding.GetBytes(iv).Length);
var keyParam = new Org.BouncyCastle.Crypto.Parameters.DesEdeParameters(byteKey);
var ivParam = new Org.BouncyCastle.Crypto.Parameters.ParametersWithIV(keyParam, IV);
var engine = Org.BouncyCastle.Security.CipherUtilities.GetCipher("DESede/CBC/PKCS5Padding");
engine.Init(encrypt, ivParam);
var output = engine.DoFinal(input);
return output;
}
public static byte[] BouncyCastleEncrypt(byte[] input)
{
return RunBouncyCastleTripleDes(input, true);
}
public static byte[] BouncyCastleDecrypt(byte[] input)
{
return RunBouncyCastleTripleDes(input, false);
}
}
我有密钥和其他有关数据加密方式的信息,如加密算法名称、密钥长度等,但我是否能够在没有此库的情况下在Windows Phone上加密/解密
这要看情况,但答案可能是肯定的
如果他们有一个著名算法的本土实现,那么他们可能有一个bug,答案可能是否定的
如果他们使用经过严格审查的库中的知名算法,并完全指定了算法和参数,答案可能是肯定的。如果你知道数据是如何加密的,并且拥有密钥,那么你应该反向执行该过程。我在服务器上有Chilkat,它使用3des,我曾尝试在windows phone客户端上使用bounchecastle进行解密,但尚未成功。也许我会在这里发布一些代码,看看我是否能得到一些建议。也许我会在这里发布一些代码,看看我是否能得到一些建议是的,发布他们的规范和一些示例代码。