对接其它平台,AES加密算法怎么搞,教你一招验证大法

2021-08-16 15:19:42 浏览数 (1)

昨天在对接实名制管理平台时,再次遇到加密算法的问题,想了想还是写篇文章沉淀下来。

可以看到这里写了AES加密--高级加密标准(AES,Advanced Encryption Standard),还附有算法说明。加密算法,我们狐友在对接其它语言开发的接口就一定会遇到。那是加菲猫来讲讲怎么做这种对接接口加密。

它是一种对称加密算法。何谓对称,对称就是加密和解密用的密钥是相同的,就像家里的门,各把钥匙的是一样的,就可以打开这个门,所以钥匙千万不能丢。

做加密算法,最重要的是验证加密后的结果对不对,所以我们要找到验证的方法。

加菲猫在找到一个可以做验证的网站。

http://tool.chacuo.net/cryptaes

可以看到选项很多,看起来复杂。

AES加密模式有多种:ECBCBCOFBCTRCFB,上方的文档写的是CBC。

文档中的数据块就是PKCS7模式,就对应上图的填充选项。

BLOCKSIZE 128就是指数据块128位。

字符集是UTF-8,如果涉及到中文,就要更改页面中的字符集。

密码和偏移量IV在文档都会给到。

输出是BASE64编码。

于是我们就可以试试这个加密工具了。

加密模式 CBC ,填充PKCS7,数据块128位,密码:0123456789ABCDEF,偏移量:0123456789ABCDEF

接下来用VFP来做加密。

加菲猫找到一个非常好用的FLL类库,里面封装了非常多的加密算法。

代码语言:javascript复制
 lccorpstr=Strconv("加菲猫的VFP",9)  &&要转UTF8
lcappsecret="0123456789ABCDEF"
Set Library To vfpencryption71.fll Additive
lcIv=lcappsecret
lcAES=Encrypt(lccorpstr,lcappsecret, 0, 1, 2, Len(lcappsecret), 16, m.lcIV)
lccorpsign=Strconv(lcAes,13)   &&输出结果要转BASE64
Release Library vfpencryption71
?lccorpsign

输出

代码语言:javascript复制
 Qp/RA1zU6wB4NjmZ/YMWg==

返回值:

字符型 - cStringtoEncrypt 的加密版本。

结果一致,加密算法没问题,可以进入正式开发了。

Encrypt函数有很多参数,都是对应页面中的那些选项,具体大家看文档了。

函数:ENCRYPT()

声明: Encrypt(cStringtoEncrypt, cSecretKey[, nEncryptionType[, nEncryptionMode[, nPaddingType[, nKeySize[, nBlockSize[, cIV]]]]]])

参数:

cStringtoEncrypt - 你想加密的明文字符串,例如“Hello World!”。

cSecretKey - 你想在加密过程中使用的明文字符串 Key,例如“My_SeCrEt_KeY”。请注意,key 针对特殊的加密类型或许需要特定的长度。更多信息请参看后面的内容。

nEncryptionType - 共有5种可用的加密方式。这个参数的值用来确定使用哪种类型,并且确定 Secret Key 的长度。在 Visual FoxPro 中,一个单字符等于 1 字节(或 8 位)。所以,一个加密算法如果需要一个 128 位的 Key ,那么就需要 Secret Key 是一个具有16个字符的字符串(16 x 8 = 128)。 0 = AES128 (需要一个 16 个字符的Key) 1 = AES192 (需要一个 24 个字符的Key) 2 = AES256 (需要一个 32 个字符的Key) *参数的默认值 4 = Blowfish (需要一个 56 个字符的Key) 8 = TEA (需要一个 16 个字符的Key) 1024 = RC4 (Key 可以是任意长度)

nEncryptionMode - 针对上面列出的加密类型一共有三种可用模式。它们是:Electronic Code Book (ECB)、Cipher Block Chaining (CBC) 和 Cipher Feedback Block (CFB) 。参数nEncryptionMode 不能应用于 RC4 加密(nEncryptionType = 1024)。

0 = ECB *参数默认值 1 = CBC 2 = CFB

3 = OFB

nPaddingType填充模式

0 = Zeroes (NULLs) *Default

1 = Spaces (blanks)

2 = PKCS7

3 = ANSI X.923

4 = ISO 10126

nKeySize - 密钥长度

nBlockSize - 填充长度

cIV - 偏移量

0 人点赞