基于注解的 java 加签验签框架 checksum

checksum

基于 java 注解生成加签验签 checksum。

开源地址:github checksum

创作缘由

原来的代码中,checksum 的生成是用的工具类方法。

后来发现如下的问题:

  1. 有些字段太大,不想参与验签,但是无法方便的调整。
  2. 不同系统的 checksum 字段不同,只好把工具方法 copy 过去,改来改去。

感觉这样有很大的弊端,完全失去了灵活性。

特性

  • 基于注解的 checksum 加签验签
  • Fluent 流式语法
  • 支持灵活的策略自定义

更新记录

更新记录

快速开始

环境要求

jdk7+

maven 3.x+

引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>checksum</artifactId>
    <version>0.0.1</version>
</dependency>

定义待加签的示例对象

  • User.java
public class User {

    @CheckField
    private String name;

    @CheckField
    private String password;

    private String address;

    @Checksum
    private String checksum;

    //Getter & Setter
    //toString()
}

核心注解

@CheckField 表示参与加签的字段信息

@Checksum 表示加签结果存放的字段

调用测试

package com.github.houbb.checksum.core;

import com.github.houbb.checksum.model.User;
import org.junit.Assert;
import org.junit.Test;

/**
 * @author binbin.hou
 * @since 0.0.1
 */
public class ChecksumBsTest {

    @Test
    public void checksumTest() {
        User user = buildUser();
        final String checksum = ChecksumBs
                .newInstance(user)
                .checksum();

        Assert.assertEquals("8D62F2BC49A9AB51280C8F42A483ED54", checksum);
    }

    @Test
    public void fillTest() {
        User user = buildUser();
        ChecksumBs.newInstance(user).fill();

        Assert.assertEquals("User{name=‘ryo‘, password=‘1234‘, address=‘china‘, checksum=‘8D62F2BC49A9AB51280C8F42A483ED54‘}",
                user.toString());
    }

    /**
     * 构建示例对象
     * @return 构建示例对象
     */
    private User buildUser() {
        User user = new User();
        user.name("ryo")
                .password("1234")
                .address("china");
        return user;
    }

}

ChecksumBs 引导类

用来创建加签的相关配置及实现。

配置核心方法

方法 默认值 备注
newInstance() 新建 ChecksumBs 实例(static)
newInstance(object) 新建 ChecksumBs 实例,并且指定待加签的对象(static,建议使用)
target(Object) 指定待加签的对象
secret(ISecret) DefaultMd5Secret 指定加密的策略,默认使用 md5 加密
sort(ISort) NameAscSort 指定排序的策略,默认根据字段的名称正序排列表
cache(ICache) DefaultFieldListCache 指定字段的缓存策略,默认使用本地 map 进行字段信息缓存

调用核心方法

方法 返回值 备注
checksum() String 返回加签的结果
fill() 将上面 checksum 的结果设置到 @Checksum 标识的字段中

自定义

上述 ISecret/ISort/ICache 都是支持自定义的。

一般只需要重新定义 ISecret 即可。

原文地址:https://blog.51cto.com/9250070/2402345

时间: 2024-10-06 10:52:56

基于注解的 java 加签验签框架 checksum的相关文章

RSA体系 c++/java相互进行加签验签--转

在web开发中,采用RSA公钥密钥体系自制ukey,文件证书登陆时,普遍的做法为:在浏览器端采用c++ activex控件,使用 c++的第三库openssl进行RAS加签操作,在服务器端采用java对客户端的签名进行验签操作.这就涉及到c++ openssl和java之间交互加签验签对客户端身份进行验证的过程. 如果你通过搜索查到我这边文章,相信你一定发现,采用openssl加签后的 数据,在java端却验签不成功,使用openssl验签可以通过.问题在于openssl的公钥发在服务端转换成j

Java实现RSA密钥对并在加解密、加签验签中应用的实例

一.项目结构 二.代码具体实现 1.密钥对生成的两种方式:一种生成公钥私文件,一种生成公钥私串 KeyPairGenUtil.java package com.wangjinxiang.genkey.util; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.security.Key; import java.security.KeyPair; import java.security

RSA加密解密及RSA加签验签

RSA安全性应用场景说明 在刚接触RSA的时候,会混淆RSA加密解密和RSA加签验签的概念.简单来说加密解密是公钥加密私钥解密,持有公钥(多人持有)可以对数据加密,但是只有持有私钥(一人持有)才可以解密并查看数据:加签验签是私钥加签公钥验签,持有私钥(一人持有)可以加签,持有公钥(多人持有)可以验签. 在金融行业在设计到数据交互传输的时候,需要考虑数据的安全性问题.下文通过介绍RSA的加密和加签两个特性,说明RSA加密技术在保障数据传输过程中的安全性以及实现数据的防篡改和防否机制的应用场景及代码

对加签验签的理解

前言 加签验签模块早已做完了,从刚开始的一脸懵逼,到上线,前前后后两周多吧,现在整理一下思路,记录一下. 什么是加签验签 加签验签,发送消息方,对消息加签名:接受消息方,验证签名是否正确. 为什么要做加签验签 做加签验签的目的主要目的就是,验证消息的完整性 如何做加签验签 简单来说, 发送消息方: 1.根据消息内容形成摘要 2.根据摘要形成签名字段 3.发送消息 接受消息方: 1.接受消息 2.根据消息内容形成摘要 3.根据摘要去验证签名是否正确 详细思路 上面讲的很粗略,这里我们从整个过程来讲

Python中rsa模块【sign 加签验签】的使用

安装 pip install rsa 使用一 说明:简单入门使用  使用公钥加密  ----------->> 使用私钥进行解密 1 # -*- coding:utf-8 -*- 2 import rsa 3 4 5 def rsa_encrypt(d_str): 6 """ 7 生成私钥 和公钥 并接受字符串进行加密 8 :param d_str: 字符串 9 :return: 返回加密结果及私钥 10 """ 11 # 生成公钥和

java签名与验签

基本概念: 加密解密 加密:发送方利用接收方的公钥对要发送的明文进行加密. 解密:接收方利用自己的私钥进行解密. 公钥和私钥配对的,用公钥加密的文件,只有对应的私钥才能解密.当然也可以反过来,用私钥加密,用对应的公钥进行解密. 签名验签 签名:发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私人密钥对这个摘要进行加密,得到的就是这个报文对应的数字签名. 通常来说,发送方会把数字签名和报文原文一并发送给接受者. 验签:接收方得到原始报文和数字签名后,用同一个哈希函数从报文中生成摘要A,另

ruby md5加签验签方法

# md5签名def md5_sign(data,key) return OpenSSL::Digest::MD5.hexdigest(data+key)end # md5验签def md5_verify(data,sign,key) return true if sign.eql? OpenSSL::Digest::MD5.hexdigest(data+key) return falseend

C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥 -变态模式【支持私钥加密,公钥解密】(二)

RSA变态模式:[私钥加密,公钥解密] 一般这种写法都是JAVA弄的..NET原生不支持.为啥,我也不清楚,大概是因为安全性问题吧,毕竟公钥是人人都可是持有的.私钥只有自己拥有. 对接注意事项:https://www.cnblogs.com/kevin860/p/9557845.html 一般方法请看:https://www.cnblogs.com/kevin860/p/9557845.html 签名一直都是[私钥加签.公钥验签]只为证明该消息是你发出来的. 这里使用了BouncyCastle1

JAVA 实现 基于RSA算法的签名验签

基本步骤 签名方: 1用sha1算出原文的摘要 2用私钥对摘要进行加密 3对密文进行BASE64编码 验证方: 1对密文进行BASE64解码 2用公钥对解码后的密文解密 3用sha1对原文计算摘要并和解密后的明文比对 上干货 //参数字符串         String userId="2312sd";         String orderId="232djfj";         String price="12312";