Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#到C+的加密/解密+; 我正在研究一个应用程序,它使用C++服务器和C++客户端,在两个应用程序之间传输许可数据。我显然想加密这些许可证,出于安全原因,但我有一些困难,找到一个库,将符合我的目的C++。也就是说,我尝试了Crypto++和CryptoAPI。Crypto++似乎是一个很好的、易于使用的库,但是Crypto++的加密和C#的加密的结果是不同的。CryptoAPI可以完成这项工作,因为它是由Microsoft维护的,但该API令人困惑且难以理解。此外,奇怪的是,C#在每个运行时生成相同的加密输出,即使我不涉及IV的随机生成。Crypto++不会这样做(在随机IV下,每个运行时的输出都会发生变化)_C#_C++_Encryption_Cryptography - Fatal编程技术网

从C#到C+的加密/解密+; 我正在研究一个应用程序,它使用C++服务器和C++客户端,在两个应用程序之间传输许可数据。我显然想加密这些许可证,出于安全原因,但我有一些困难,找到一个库,将符合我的目的C++。也就是说,我尝试了Crypto++和CryptoAPI。Crypto++似乎是一个很好的、易于使用的库,但是Crypto++的加密和C#的加密的结果是不同的。CryptoAPI可以完成这项工作,因为它是由Microsoft维护的,但该API令人困惑且难以理解。此外,奇怪的是,C#在每个运行时生成相同的加密输出,即使我不涉及IV的随机生成。Crypto++不会这样做(在随机IV下,每个运行时的输出都会发生变化)

从C#到C+的加密/解密+; 我正在研究一个应用程序,它使用C++服务器和C++客户端,在两个应用程序之间传输许可数据。我显然想加密这些许可证,出于安全原因,但我有一些困难,找到一个库,将符合我的目的C++。也就是说,我尝试了Crypto++和CryptoAPI。Crypto++似乎是一个很好的、易于使用的库,但是Crypto++的加密和C#的加密的结果是不同的。CryptoAPI可以完成这项工作,因为它是由Microsoft维护的,但该API令人困惑且难以理解。此外,奇怪的是,C#在每个运行时生成相同的加密输出,即使我不涉及IV的随机生成。Crypto++不会这样做(在随机IV下,每个运行时的输出都会发生变化),c#,c++,encryption,cryptography,C#,C++,Encryption,Cryptography,有人有什么建议或指导方针吗?我对Crypto++和C#都使用CBC模式,所以我认为这不是问题。我目前正在使用TripleDES使程序首先工作。我是否应该使用不同的算法(一旦完成,我肯定会使用) 代码,按要求(对此表示抱歉): 和解密(C++): std::字符串解密(std::字符串加密,字符串密钥) { 常量byte*byteKey=(byte*)Key.c_str(); CryptoPP::SecByteBlock密钥(CryptoPP::DES_EDE2::DEFAULT_KEYLENGT

有人有什么建议或指导方针吗?我对Crypto++和C#都使用CBC模式,所以我认为这不是问题。我目前正在使用TripleDES使程序首先工作。我是否应该使用不同的算法(一旦完成,我肯定会使用)

代码,按要求(对此表示抱歉):

和解密(C++):

std::字符串解密(std::字符串加密,字符串密钥)
{
常量byte*byteKey=(byte*)Key.c_str();
CryptoPP::SecByteBlock密钥(CryptoPP::DES_EDE2::DEFAULT_KEYLENGTH);
key.Assign(byteKey,key.length());
字节iv[8]={1,1,1,1,1,1,1,1};
试一试{
恢复的字符串,密码;
CryptoPP::CBC_模式::解密d;
d、 SetKeyWithIV(key,key.size(),iv);
CryptoPP::StringSource(ToDecrypt,true,新的CryptoPP::Base64解码器(新的CryptoPP::StringSink(密码));
CryptoPP::StringSource(cipher,true,new CryptoPP::StreamTransformationFilter(d,new CryptoPP::StringSink(已恢复));

std::cout
//解密Dll

extern "C"

{
__declspec(dllexport)  char* Parse(LPSTR Data)
{
    CString decryptString;  //ccrpyt is a c++ encryption and decryption library
    CCrypt crypt;
    char* sUser = new char[200];
    char* sURL = new char[200];
        strcpy(sUser, Data);
     CString sEncryptedUser= crypt.DecryptStrFromHex(sUser);  
    strcpy(sURL, sEncryptedUser.GetBuffer());
    return sURL ;
}
}


{
    __declspec(dllexport)  char* Parse(LPSTR Data)
{
    CString decryptString;  //ccrpyt is a c++ encryption and decryption library
    CCrypt crypt;
    char* sUser = new char[200];
    char* sURL = new char[200];
        strcpy(sUser, Data);
     CString sEncryptedUser= crypt.DecryptStrFromHex(sUser);  
    strcpy(sURL, sEncryptedUser.GetBuffer());
    return sURL ;
}
}
我把它叫做
C#
as

public static extern IntPtr Parse([MarshalAs(UnmanagedType.LPStr)] string s1);
            string s = Request.QueryString.Get("U");
            IntPtr i;
            {
                i = Parse(s);
            }
            string jj =Marshal.PtrToStringAnsi(i);
            Response.Write(jj);
        }

//解密Dll

extern "C"

{
__declspec(dllexport)  char* Parse(LPSTR Data)
{
    CString decryptString;  //ccrpyt is a c++ encryption and decryption library
    CCrypt crypt;
    char* sUser = new char[200];
    char* sURL = new char[200];
        strcpy(sUser, Data);
     CString sEncryptedUser= crypt.DecryptStrFromHex(sUser);  
    strcpy(sURL, sEncryptedUser.GetBuffer());
    return sURL ;
}
}


{
    __declspec(dllexport)  char* Parse(LPSTR Data)
{
    CString decryptString;  //ccrpyt is a c++ encryption and decryption library
    CCrypt crypt;
    char* sUser = new char[200];
    char* sURL = new char[200];
        strcpy(sUser, Data);
     CString sEncryptedUser= crypt.DecryptStrFromHex(sUser);  
    strcpy(sURL, sEncryptedUser.GetBuffer());
    return sURL ;
}
}
我把它叫做
C#
as

public static extern IntPtr Parse([MarshalAs(UnmanagedType.LPStr)] string s1);
            string s = Request.QueryString.Get("U");
            IntPtr i;
            {
                i = Parse(s);
            }
            string jj =Marshal.PtrToStringAnsi(i);
            Response.Write(jj);
        }

我们需要代码和输出来查看IV部分出错的地方。只是添加了代码。对此我们深表歉意。@jForshee:Your
Decrypt
函数没有使用它传递的
Key
参数——这是故意的吗?为什么IV设置为所有零?有人能检查CryptoPP中的默认填充是否为PKCS#5和/或PKCS#7吗?Prepend使用随机IV加密密文是解决IV传输问题的正常方法(IV始终与密码块大小相同)。使用ECB模式对于非相关随机数据以外的任何其他数据都是不安全的。此外,不执行完整性检查的客户端/服务器协议(例如,由于填充预言符)也是不安全的-您可能还想在密文上创建一个(H)MAC,并在解密之前验证(密码的最后一块)数据。我们需要代码和输出来查看IV部分出错的地方。只是添加了代码。对此很抱歉。@jForshee:Your
Decrypt
函数没有使用它传递的
Key
参数——这是故意的吗?为什么IV设置为所有零?有人能检查CryptoPP中的默认填充是否为PKCS#5和/或PKCS#7吗?P使用随机IV重复密文是解决IV传输问题的正常方法(IV始终与密码块大小相同)。使用ECB模式对于非相关随机数据以外的任何其他数据都是不安全的。此外,不执行完整性检查的客户端/服务器协议也是不安全的(例如,由于填充的预言),你也希望在密文上创建(H)MAC,并在解密(最后一个数据块)之前验证它。你能详细说明我如何在C++中加密并在C++中解密它吗?你能详细说明我如何在C++中加密并在C++中解密它吗?