使用 SHA1 通过 Salesforce Apex 加密密码

Encrypt a password with Salesforce Apex using SHA1

我需要编写一个加密密码的 Salesforce Apex 代码。这用于轮询外部 API 凭据必须遵循此加密模型。

API 密码加密需要 3 个参数:用户密码、随机的 16 字符字符串和格式为 2022-01-06T17:01:22Z 的时间戳。

公式为:outputKey = Base64(SHA1($randomString + $timestamp+ SHA1($userPassword)))

干净的加密会产生以下结果 输入:
密码:花生酱 randomString: uniqueCode123456 时间戳:2022-01-06T17:01:22Z

预期输出:FApp+ayrBcB5XUhygr9lFJLK1p0=

我的代码目前 运行 如下,但没有提供预期的输出。 (注意:为简单起见,变量 uniqueCode 和 timestamp 已在此处进行硬编码,但它们是在每次 API 调用时生成的)。

String uniqueCode = 'uniqueCode123456';
String timestamp = '2015-09-30T14:12:15Z'; 
Blob password = Blob.valueOf(‘peanutButter’);
Blob hashPassword = Crypto.generateDigest('SHA1', password); 
String combinedPassword = uniqueCode + timeStamp + EncodingUtil.convertToHex(hashPassword);

Blob blobCombinedPassword = Blob.valueOf(combinedPassword);
Blob hashedFull = Crypto.generateDigest('SHA1', blobCombinedPassword);
String outputKey = EncodingUtil.base64encode (hashedFull);

我需要运行什么不同才能生成正确的输出?

谢谢

这对您的输入数据产生相同的结果:

Blob pwd = Crypto.generateDigest('SHA1', Blob.valueOf('peanutButter'));
Blob full = Blob.valueOf('uniqueCode1234562022-01-06T17:01:22Z');
String combo = EncodingUtil.convertToHex(full) + EncodingUtil.convertToHex(pwd);
Blob comboBlob = EncodingUtil.convertFromHex(combo);
Blob finalBlob = Crypto.generateDigest('SHA1', comboBlob);
String finalStr = EncodingUtil.base64Encode(finalBlob);
System.debug(finalStr); // Prints FApp+ayrBcB5XUhygr9lFJLK1p0=

所以您的错误是将 combinedPassword 解释为文本,而在第二次转换为 Blob 时却不是。