在接口集成时,http head中的数据通常需要加密处理。(token、password等)
apex内置了Crypto Class加密类提供调用。配合EncodingUtil类使用,可实现加密并编码。
salesforce提供了详细的文档:
https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_classes_restful_crypto.htm
apex实现几种主流的加密方式:base64、MD5、SHA、AES代码举例:
base64:
代码语言:javascript复制 EncodingUtil.base64Encode(Blob.valueOf(dataStr));
MD5:
代码语言:javascript复制 public static String MD5Encode(String input){
Blob blobStr = Blob.valueOf(input);
//加密
Blob hash = Crypto.generateDigest('MD5',blobStr);
//编码
String reStr = EncodingUtil.convertToHex(hash);
return reStr;
}
SHA:
代码语言:javascript复制 public static String SHA1Encode(String input){
Blob blobStr = Blob.valueOf(input);
//加密
Blob hash = Crypto.generateDigest('SHA1',blobStr);
//编码
String reStr = EncodingUtil.convertToHex(hash);
return reStr;
}
AES加密:
代码语言:javascript复制 Blob data = Blob.valueOf(DataStr);
//密钥,随机16位字符串
String iv = EncodingUtil.ConvertTohex(Crypto.GenerateAESKey(128)).SubString(0, 16);
//加密
Blob encrypted = Crypto.encrypt('AES128',Blob.valueOf(password),Blob.valueOf(iv),data);
//编码
String secret = EncodingUtil.base64Encode(encrypted)
那么在官方文档中未提供的加密方式通过apex可以实现吗?例如RSA加密
---------------不能。由于项目内第三方系统使用rsa加密数据集成,头疼不已。但截止今天答案仍是不能。(除非用java做接口专门加密)
附上一个关于加密的有趣的网站
https://the-x.cn/cryptography/Des.aspx