欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数字签名及验证功能实现思路

程序员文章站 2022-03-14 20:29:50
...

这几天研究了下数字签名相关的功能,简单分享下实现的思路。因签名及验证已封装成插件,故本文不对具体的签名功能及验签功能进行讲解,只分享如何集成到实际项目中。

需求

在表单提交的时候进行签名,查看时可以对该单据数据进行签名校验。

目的

防止数据被后台私自篡改,有理有据。

设计思路

  1. 表单编辑页面,点击提交时,自行组装需要进行签名验证的数据,拼接成json字符串原文;
  2. 调用签名插件进行签名,并获取签名后的密文信息;
  3. 调用后台方法,保存原文、密文、以及当前表单的唯一标识ID;
  4. 表单查看页面,点击验签,获取当前页面对应的需要进行签名验证的数据,拼接成json字符串原文(格式保证和步骤1拼接的原文一致);
  5. 根据表单唯一标识ID查询对应数据库存储的密文;
  6. 最后调用签名插件的验证方法进行数据验证(传参为步骤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 '原文信息-原文';
相关标签: java 数字签名