首先,我们应该了解为什么我们需要在Salesforce营销云中加密。花点时间识别对您组织的最可能威胁。这将帮助您区分需要从数据中加密的数据,以便您只能加密您需要的内容。确保您的租户秘密和钥匙被备份,并小心您允许管理您的秘密和钥匙。

  1. 大纲 您组织的威胁模型。排练一个适当的威胁建模练习,以发现面积单位可能对您的组织产生影响的威胁。使用您的调查结果进行信息分类主题,可以帮助您决定编码的知识。
  2. 编码 仅在任何必要的地方。
  • 并非所有知识都很敏感。需要编码以满足您的监管,安全,合规性和隐私需求的目标数据。不必要地加密知识会影响实用性和性能。
  • 提前判断您的知识分类主题,并与安全,合规性和企业IT部门的利益相关者进行概要需求。抵御安全和风险措施的平衡业务实用性,并偶尔挑战您的假设。
  1. 早期生产技术 备份和归档 钥匙和知识。如果您的租户秘密区域单位被摧毁,请重新实现他们访问您的知识。完全符合确保您的知识和租户秘密保障并保持在一个非常安全的地方。 Salesforce无法帮助您删除,销毁或错位的租户秘密。
  2. 感知 编码适用 对于所有或任何用户,尽管他们的权限。
  • 您管理世界卫生组织在明文中读取的加密字段值误解“查看加密数据”权限。但是,尽管用户权限,但在休息时,请在这些字段中保留的信息。
  • 有用的限制区域单位对用户世界卫生组织的强制性与加密知识行为。思考是否将应用于一些业务用户以及该应用程序影响与信息交互的不同用户的方式。
  1. 扫描 受保护的平台编码问题并在您的组织中感知其含义。
  • 判断问题对您的业务答复和实施的影响。
  • 在部署到生产气氛之前,检查保护平台在非常沙箱大气中编码。
  • 在制裁编码之前,修复您刚刚发现的任何违规行为。例如,在一个非常符合子句触发违规的地方引用加密字段。同样,如果您以非常SOQL ORDER BY子句引用加密字段,则会发生违规。在每个情况下,通过删除对加密字段的引用来修复违规行为。
  1. 分析 在部署之前,请查看AppExchange应用程序。
  • 如果您在AppExchange中使用哺乳应用程序中的关联,请查看其在组织中与加密信息进行交互,以及是否有其实用性受到影响。
  • 如果护理应用程序中的关联与在Salesforce之外保持的加密信息交互,但是在处理发生的情况下以及数据受到保护方式。
  • 如果您认为防守平台秘密写作可能会影响应用程序的实用性,提高供应商以方便分析。结合讨论任何必须与捍卫平台秘密写作兼容的定制解决方案。
  • AppExchange上的应用程序,方形措施仅设计了Mistreatment Force.com继承了防守平台秘密写作能力和限制。
  1. 记住,平台秘密写作是’T用户身份验证或授权工具。
  • 使用现场级安全设置,页面布局设置和验证规则,而不是平台秘密写作,以规范用户将看到该信息。
  • 确保用户在不知不觉中授予“View Encrypted Data”许可仍然可以看到仅适用的信息。默认情况下,任何用户都将编辑加密字段,甚至是用户,而不是“查看加密数据”权限。
  1. 授予 “管理秘密写作键”用户仅限许可用户权限。具有“管理秘密写入密钥”权限的用户将生成,导出,导入和销毁特定组织的键。使用Setup Audit Path监控这些用户的关键管理活动。
  1. 授予 “查看加密数据”仅用户对许可用户的权限。授予“查看加密数据”对用户联合国机构的权限应该以明文中的加密字段读取,以及整合用户联合国机构应该以明文扫描敏感信息。虽然“查看加密数据”权限,请访问任何或所有用户都可以访问文件的加密文件可见的正方形措施。
  1. 群众加密 您现有的信息。现有字段和文件信息ISN’在激活捍卫平台秘密写作后机械加密。要在代码现有字段信息中编写,请更新与扇区信息相关的记录。此操作触发了这些记录的秘密写作,因此您现有的信息将静止加密。写入代码现有文件,请联系Salesforce。
  1. 不使用 敏感信息的货币和范围字段。你’LL通常能够在未加密相关的货币或范围字段的同时保留非公共,敏感或受监管的信息安全。加密这些字段可能对平台具有广泛的实际后果,例如对汇总大纲报告,报告时间框架和计算的中断,使得它们仍然存在’t encryptable.
  1. 交流 对您的用户有关秘密写作的影响。在制定生产气氛期间修改防守平台的秘密写作之前,请告知用户有关您的业务答案。例如,只要与您的业务流程相关,共享在捍卫平台秘密写作问题中删除的数据。
  1. 使用自由裁量权 一旦授予登录访问权限。如果具有“查看加密数据”权限的用户权限授予对不同用户的登录访问,则相反的用户处于以明文中的加密字段查看。
  1. 写入代码你的 信息虐待 最前面的电流密钥。生成替换租户秘密后,任何新信息都会被加密误解此密钥。但是,现有的敏感信息仍然是加密的误解以前的键。在此方案期间,Salesforce强烈建议重新加密这些字段误解最新的键。联系Salesforce为促进此类。

要加密某些值,我们必须使用可能是硬编码的一些键值,或者我们也可以使用此键生成密钥:

blob cryptokey = crypto.generateaeskey(256);

我们必须使用相同的密钥来解密该价值。

在这里,我将分享一些代码。希望它会帮助您。我创建了一个VisualForce页面和一个控制器。在页面中,只有一个字段(名称)是有两个按钮(保存& Update). 当在名称字段中输入某些值并单击“保存”按钮,该值将以对象加密格式存储。 现在在URL中记录ID,然后单击“更新”按钮加密值将转换为原始格式。

Visualforce  Page:

<span style="font-weight: 400;"><apex:page standardController="EnCrypt_Decrypt__c" extensions="EncryptExtensioncls"></span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">    <apex:form ></span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">        <apex:pageBlock ></span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">            <apex:pageBlockSection ></span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">                <apex:inputField value="{!encrypt.Name}"/></span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">                <apex:commandButton value="Save" action="{!Save}"/></span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">                <apex:commandButton value="Update" action="{!test}"/></span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">            </apex:pageBlockSection></span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">        </apex:pageBlock></span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">    </apex:form> </span><span style="font-weight: 400;">
</span><span style="font-weight: 400;"></apex:page></span>

Controller:

public class EncryptExtensioncls{
public EnCrypt_Decrypt__c encrypt{get;set;}
 //Blob cryptoKey;
Blob cryptoKey = Blob.valueOf('380db410e8b11fa9');
public Id recordId{get;set;}
public EncryptExtensioncls(ApexPages.StandardController controller){
//cryptoKey = Crypto.generateAesKey(256);
recordId = Apexpages.CurrentPage().getParameters().get('id');
if(recordId !=null){
encrypt = [SELECT id,Name From EnCrypt_Decrypt__c WHERE id=:recordId];
  }else{
encrypt = new EnCrypt_Decrypt__c();
  }
}
public PageReference Save(){
Blob data = Blob.valueOf(encrypt.Name);
Blob encryptedData = Crypto.encryptWithManagedIV('AES128',cryptoKey,data);
String b64Data = EncodingUtil.base64Encode(encryptedData);
encrypt.name = b64Data;
 insert encrypt;
 return null; 
}
public PageReference test(){
 //blob cryptokey = crypto.generateaeskey(256);
 //Blob data = Blob.valueOf(encrypt.Name);
Blob data = EncodingUtil.base64Decode(encrypt.Name);
Blob decryptedData = Crypto.decryptWithManagedIV('AES128',cryptoKey,data);
String dryptData = decryptedData.toString();
System.debug('Printing dryptData '+dryptData);
encrypt.name = dryptData;
 update encrypt;
 return null;
  }
}