尝试在node.js中重新创建以下php加密代码:
$size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($size, MCRYPT_RAND);
$msg = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, 'MY_KEY_LONG_STRING', 'PLAINTEXT', MCRYPT_MODE_ECB, $iv));
Run Code Online (Sandbox Code Playgroud)
尝试过这个:
var text = 'PLAINTEXT';
var len = text.length;
for (var i = 0; i < 16 - len % 16; i++) { // pad to multiple of block size
text += '\0';
}
var key = 'MY_KEY_LONG_STRING';
key = key.substr(0, 16); // trim to expected key size for aes128
var cipher = crypto.createCipher('aes-128-ecb', key);
cipher.setAutoPadding(false); // did our own padding, to match mcrypt_encrypt …Run Code Online (Sandbox Code Playgroud) 我有一个属于另一个帐户的存储桶。使用 AWS CLI,我可以访问(列出和读取对象)此存储桶。例如:
aws s3 ls s3://somebucket/foo/bar
Run Code Online (Sandbox Code Playgroud)
列出对象。
尝试使用 Java SDK(在 Scala 中)重新创建相同的内容,我收到上述异常 (SignatureDoesNotMatch)。
这是代码:
package com.myco.sample
class TestCase() {
val credentials = new com.amazonaws.auth.BasicAWSCredentials(
"ACCESS_KEY_ID",
"SECRET_ACCESS_KEY"
)
val s3 = new com.amazonaws.services.s3.AmazonS3Client(credentials)
val endpoint = "somebucket.s3-us-west-2.amazonaws.com"
s3.setEndpoint(endpoint)
try {
val objs = s3.listObjects("foo/bar")
} catch {
case ace: com.amazonaws.services.s3.model.AmazonS3Exception => {
println(ace.getAdditionalDetails)
}
}
}
Run Code Online (Sandbox Code Playgroud)
对 listObjects 的调用引发异常。输出是:
com.amazonaws.services.s3.model.AmazonS3Exception: The request signature we calculated does not match the signature you provided. Check your key and signing method. (Service: Amazon …Run Code Online (Sandbox Code Playgroud)