使用 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
时却不是。
我需要编写一个加密密码的 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
时却不是。