数字签名及验证功能实现思路
程序员文章站
2022-03-14 20:29:50
...
这几天研究了下数字签名相关的功能,简单分享下实现的思路。因签名及验证已封装成插件,故本文不对具体的签名功能及验签功能进行讲解,只分享如何集成到实际项目中。
需求
在表单提交的时候进行签名,查看时可以对该单据数据进行签名校验。
目的
防止数据被后台私自篡改,有理有据。
设计思路
- 表单编辑页面,点击提交时,自行组装需要进行签名验证的数据,拼接成json字符串原文;
- 调用签名插件进行签名,并获取签名后的密文信息;
- 调用后台方法,保存原文、密文、以及当前表单的唯一标识ID;
- 表单查看页面,点击验签,获取当前页面对应的需要进行签名验证的数据,拼接成json字符串原文(格式保证和步骤1拼接的原文一致);
- 根据表单唯一标识ID查询对应数据库存储的密文;
- 最后调用签名插件的验证方法进行数据验证(传参为步骤4获取的原文+步骤5查询的密文),验证成功则说明数据未被篡改。
表设计
-- Create table
create table SIGN_INFOMATION
(
id VARCHAR2(32) not null,
business_id VARCHAR2(32),
user_name VARCHAR2(50),
user_id VARCHAR2(50),
create_time VARCHAR2(50),
sign_value CLOB,
original CLOB
);
-- Add comments to the columns
comment on column SIGN_INFOMATION.id
is '主键';
comment on column SIGN_INFOMATION.business_id
is '唯一标识ID';
comment on column SIGN_INFOMATION.user_name
is '用户名';
comment on column SIGN_INFOMATION.user_id
is '用户id';
comment on column SIGN_INFOMATION.create_time
is '创建时间';
comment on column SIGN_INFOMATION.sign_value
is '签名信息-密文';
comment on column SIGN_INFOMATION.original
is '原文信息-原文';
下一篇: RSA 数字签名—— Java 实现