首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一加密,Node.js解密

统一加密,Node.js解密
EN

Stack Overflow用户
提问于 2014-01-21 11:04:20
回答 1查看 1.7K关注 0票数 2

我试图将一些数据从联合发送到Node.js快递服务器,反之亦然。

下面是我在C#中的统一代码:

代码语言:javascript
复制
public string Encrypt(string toEncrypt, string key, bool useHashing) 
{     

    byte[] keyArray;     
    byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);      

    if (useHashing){               
        MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
        keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));     
    }     
    else {
        keyArray = UTF8Encoding.UTF8.GetBytes(key);      
    }

    var tdes = new TripleDESCryptoServiceProvider();
    tdes.Key = keyArray;
    //tdes.Mode = CipherMode.CBC;  // which is default     
    //tdes.Padding = PaddingMode.PKCS7;  // which is default

    ICryptoTransform cTransform = tdes.CreateEncryptor();     
    byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    tdes.Clear();
    return Convert.ToBase64String(resultArray, 0, resultArray.Length); 

}

    Dictionary<string, string> data = new Dictionary<string, string>();
    data.Add("Test01", "Tanmoy");
    data.Add("Test02", "Mitra");
    string json = Json.Serialize(data);

    byte[] postData = Encoding.UTF8.GetBytes(Encrypt(json, "12345", true));

    StartCoroutine(HttpPost("test", postData, delegate(string requestError, IDictionary rData) {
        cb(null,rData);
    }));

这是我的Node.js代码:

代码语言:javascript
复制
var alg = 'des-ede3-cbc';
var key = new Buffer('123456789012345678901234', 'utf-8');
var iv = new Buffer(m_strApiPass, 'base64');

var encrypted = new Buffer(reqString, 'base64');

var decipher = crypto.createDecipheriv(alg, key, iv);
var decoded = decipher.update(encrypted, 'binary', 'ascii');
decoded += decipher.final('ascii');

我得到了这个错误:

TypeError:错误:0606506D:数字信封routines:EVP_DecryptFinal_ex:wrong最终块长度

我注意到,在C#中,我得到了一个字符串,

代码语言:javascript
复制
pySqIdAiJpDOW7XkOQDoblLOtZ382J1G1F1UE16W0Ulg+x5X0Bocjg==

但是,当我将这个字符串发送到Node.js时,它变成:

代码语言:javascript
复制
pySqIdAiJpDOW7XkOQDoblLOtZ382J1G1F1UE16W0Ulg x5X0Bocjg  

问题是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-01-21 11:55:58

原因很简单:返回的密文由任意观察者的随机查看字节组成。这意味着其中有一些字节不映射到某个字符。这些字节内的信息将丢失。

如果您在传输过程中需要字符串,则以64为基础对密文进行编码,并在接收端再次对其进行解码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21256279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档