我的应用会收到一个也加密的base64编码值。数据可以有几种不同的方式,因此我想创建可链式的方法来保持代码的清洁和模块化。
我希望能写:decryptionChain.decodeBase64(b64Value).stringToBuffer()。finallyDecrypt();
当我运行代码时,最后一个属性方法“finallyDecrypt”将返回undefined。
为什么“finallyDecrypt”方法会以未定义的形式返回?其余的都工作,如果我运行ecryptionChain.decodeBase64(b64Value).stringToBuffer()我得到我期望的缓冲区。只有当finallyDecrypt链接在一起时我才会出错。
以下是代码:
function decrypt(encrypted) {
var decipher = crypto.createDecipheriv(algorithm, password, iv);
decipher.setAuthTag(encrypted.tag);
var dec = decipher.update(encrypted.content, 'hex', 'utf8');
dec += decipher.final('utf8');
return dec;
}
var decryptionChain = {
currentValue:"",
decodeBase64: function (encryptedValue){
this.currentValue = new Buffer(encryptedValue.toString(), "base64");
return this;
},
stringToBuffer: function() {
if (this.currentValue) {
myBuffer = JSON.parse(this.currentValue, function (key, value) {
return value && value.type === 'Buffer'
? new Buffer(value.data)
: value;
});
}
return myBuffer;
},
finallyDecrypt : function(myBuffer){
if(myBuffer){
decrypt(myBuffer);
}
return this;
}
};
答案 0 :(得分:0)
从显示的代码中,我发现了一些问题。首先:
int[] input = new int[] { 1, 2, 3, -1, 1, 3, -2, 3, 4 };
// a list is easier to use dynamic sizes
List<int> sums = new List<int>();
// the sum to the next negative number
int tmp_sum = 0;
// loop through
foreach(int _element in input)
{
if(_element <= 0 )
{
if(tmp_sum > 0)
{
// negative element found, so save the sum if it is bigger than 0
sums.Add(tmp_sum);
tmp_sum = 0;
}
}
else
{
// keep summing up
tmp_sum += _element;
}
}
//save the last one, if it is bigger than 0
if(tmp_sum > 0)
sums.Add(tmp_sum);
// convert to an array
int[] result = sums.ToArray();
!= decryptionChain
如果问题只是一个拼写错误,那么请忽略,如果不是,请为此付出代价。
请使用var减少范围错误的可能性,或留下“范围变量”。
其次,不要使用string as a Boolean。
第三,您似乎遇到decryptChain
的问题,请在返回之前分配(不必要,但更简单)