在Apex中使用ASCII及XOR Operation对QR Code Encode实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/itsme_web/article/details/85226190

前言】:在行文前感谢Java同事的帮助才知道如何使用ASCII!
早前我介绍过2篇关于加解密的文章,分别是apex加密与解密js加密apex解密,那么这篇我们将分享第三种场景的应用即使用ASCII与XOR位运算在apex加密中间件解密

场景描述】:
我们在使用Marketing Cloud进行Birthday Campaign相关的Email邮件营销时,一旦客户在收到的邮件中选择了需要的礼品,所选礼品券Reward Code的QR Code将会被包含在第二封邮件一齐抵达到客户终端。

这套Reward Code的分配和导入之前是由中间件和sf共同完成,那么现在需要完全由sf承担这一过程的所有工作,在Requirment Change实施的过程中,上周我收到老板邮件,说是需要使用新方案解决QR安全性的问题,即sf端对QR code的结果进行加密后再调用中间件的QR Image渲染接口实时获取二维码,然后在客户扫描后中间件进行解密。

加密模式】:

Apex对应加密解决方案】:记得使用URLENCODE处理下最终结果

String QRcode = '001999990010019600000000005061';
String KEY = 'r63yBbsaXSVCZAxxxxxxxxxxxxxJ5dKeUtcv7uRgNTP';// fake value
List<Integer> charArr = new List<Integer>();
for(Integer i = 0; i < QRcode.length(); i++) {
	charArr.add(QRcode.charAt(i)^KEY.charAt(i));	
	System.debug(QRcode.charAt(i)^KEY.charAt(i));    
}
String encodeStr = String.fromCharArray(charArr);
System.debug(encodeStr);
String result = EncodingUtil.URLENCODE(encodeStr,'UTF-8');// if you don't encode the string using the util method, that will miss some info when decode.
System.debug(result);

分析】:Bitwise operations in C | ASCII | String Class
在看到邮件时,大意知道这个是加密的方案,但是加密过程如何运算全然不知,在咨询过Java同事后,才明白了ASCII这个概念,然后知道了XOR运算法则(异或运算相同为0,不同为1),也知道了如何区ASCII表里面去对应字符串和Integer及Binary的映射关系。

在上图中QR Code/KEY字符串中每一个字符对应C列,通过C列的位置我们可以通过A列的二进制来进行位运算,然后再替换这一位置字符即可以得到encode后的密文。

猜你喜欢

转载自blog.csdn.net/itsme_web/article/details/85226190
今日推荐