自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 SM2加密的密文byte数组与ASN.1互转

SM2加密的字节数组转换为ASN.1结构对象

2024-07-01 22:11:34 360

原创 SM2的签名值byte数组与ASN.1互转

ASN.1抽象语言标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的,它提供了一整套正规的格式用于描述对象的结构。

2024-07-01 21:23:08 306

原创 ocsp查询证书状态

OCSP服务其实也是用于验证证书是否有效,与之前博客里讲的不同之处在与,通过OCSP服务查询证书状态是实时的,一般证书发布机构将证书吊销后,会发布到Ldap里,这个几乎是实时发布的。所以OSCP服务的证书查询结果是实时的,准确性要比本地验证准确的多。

2024-06-25 09:00:00 157

原创 通过数字证书获取CRL吊销列表

在一些对安全性要求比较严格的企业,需要在每次使用证书时,要求对证书的有效性进行验证,如何验证可查看我的其他博客。其中验证的吊销列表(CRL)是可以从数字证书中获取吊销列表文件的发布地址的。

2024-06-20 21:21:04 190

原创 Certificate数字证书的有效性验证

数字证书有效性验证的概念及代码

2024-06-19 22:12:48 1373

原创 jdk的动态代理

自Java1.3以后,Java提供了动态代理技术,允许开发者在运行期创建接口的代理示例。在sun刚推出动态代理时,还很难想象它有多大的实际用途,现在终于发现动态代理技术是实现AOP的绝好底层技术。

2024-01-26 14:56:06 363 2

原创 设计模式---观察者模式

Java的观察者模式是一种设计模式,它属于行为型设计模式家族,用于处理软件系统中对象之间的联动或者说事件通知机制。在观察者模式中,存在两个核心角色:观察者(Observer)和被观察者(Observable)。这种模式定义了对象之间的一对多依赖关系,允许一个对象(被观察者)的状态变化自动通知其他对象(观察者),从而这些对象可以做出相应的行为。

2024-01-26 14:55:46 817

原创 seata分布式事务(与dubbo集成)

​AT 模式是 Seata 创新的一种非侵入式的分布式事务解决方案,Seata 在内部做了对数据库操作的代理层,我们使用 Seata AT 模式时,实际上用的是 Seata 自带的数据源代理 DataSourceProxy,Seata 在这层代理中加入了很多逻辑,比如插入回滚 undo_log 日志,检查全局锁等。本文中,我们将重点介绍 Seata AT 模式的使用,如果您对于 AT 模式原理感兴趣​。

2024-01-09 17:20:03 1467

原创 dubbo的springboot集成

Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

2024-01-09 13:25:58 1362

原创 sentinel-集群流量控制

(因网上大多数案例都是从官网抄的,看的特别费劲,所以学习完了以后特意整理了一个自己的案例,介绍和理论的东西还是要从官网抄,描述的很好,很精辟)为什么要使用集群流控呢?假设我们希望给某个用户限制调用某个 API 的总 QPS 为 50,但机器数可能很多(比如有 100 台)。这时候我们很自然地就想到,找一个 server 来专门来统计总的调用量,其它的实例都与这台 server 通信来判断是否可以调用。这就是最基础的集群流控的方式。另外集群流控还可以解决流量不均匀导致总体限流效果不佳的问题。

2023-12-20 19:04:49 1551

原创 sentinel-单机流量控制

Sentinel被称为分布式系统的流量防卫兵,是阿里开源流控框架,从服务限流、降级、熔断等多个维度保护服务。

2023-12-20 15:47:04 1027

原创 AQS线程同步器-Semaphore(信号量同步器)

Semaphore同步器的作用是控制共享资源的最大可访问数量,或者定义最多允许多少个线程对共享资源同时进行访问。一个典型的运行就是实现池化机制,如对象池、连接池等。

2023-11-22 14:06:24 70

原创 AQS线程同步器-CyclicBarrier(循环栅栏同步器)

循环栅栏同步器,多个线程处在同一个点时(所有线程都调用了await()方法),开始继续执行。并且可以执行reset()方法后可重复使用。

2023-11-22 13:54:51 86

原创 AQS线程同步器-CountDownLatch(倒计时同步器)

CountDownLatch是AQS的一个实现类,主要提供了对多个线程进行协调、控制的作用,如作为开关,控制多个线程同时开始工作,或者在主线程等待所有子线程的执行完成。CountDownLatch相当于一个倒计时的实现,每个线程都可以进行递减,待递减到0时,说明时间到了,或者全部线程的功能做都完成了,此时主线程可以阻塞返回。

2023-11-22 13:07:12 173

原创 AQS线程同步器

被唤醒时,则从WAITING或TIME_WAITING状态改为RUNABLE,等待CPU的调度执行,在AQS的实现中,主要是使用LockSupport这个工具类的用于阻塞和唤醒线程的相关方法来对线程的状态进行控制。公平策略的有限是线程不会被饿死,缺点是执行慢的线程会影响执行快的线程。线程同步器是协调多个线程对共享资源的访问,AQS提供了一个基于先入先出队列实现的线程同步器基础框架,具体的线程同步器实现类只需要关注共享资源的访问控制(或者说是可共享资源数量的定义)。,将线程放在队列中,等待执行。

2023-11-22 11:33:07 48

原创 可重入读写锁ReentrantReadWriteLock的使用

ReentrantLock和synchronized一样,是互斥锁,只能有一个线程访问,在读、写共享资源的时候,性能是比较差的,而ReentrantReadWriteLock是有两个锁,一个读锁、一个写锁,可以做到多个线程读取共享资源。ReentrantReadWriteLock是基于AQS实现的,所以所有的等待执行线程都是存在先入先出的队列中的。一个线程执行完之后,会唤醒下一个队列中的线程节点。

2023-11-15 14:03:20 105

原创 可重入锁ReentrantLock的使用

ReentrantLock是基于AQS框架实现的,主要采用的是CAS机制及自旋策略的方式,在性能是高于synchronized的,并且ReentrantLock提供了更加灵活的方法,加锁、释放锁、是否有其他线程等待执行、是否已被其他线程获取锁,均提供了方法,相比较synchronized,非常的灵活。

2023-11-15 12:19:26 82

原创 Java并发队列-BlockingDeque(三)

BlockingDeque为先入先出双端队列,意思就是可以从该队列的头部和尾部同时获取数据。

2023-11-14 13:02:20 54

原创 Java并发队列-BlockingQueue(二)

3.线程安全:BlockingQueue是线程安全的,遵循内存可见性的happend-before原则,即往队列写入数据的线程优于从队列读取或删除数据的线程,从而保证一个线程的写对其他线程可见。(5) poll timeout:超时版本方法,阻塞等待指定时间,如果超时还没有读到数据,则退出阻塞。(1) element方法,抛异常,其中element方法只是读取队列头的数据,不会删除队列头的数据。(4) peek方法:非阻塞读取,与element一样,也只是读取队列头数据,不会删除队列头的数据。

2023-11-10 10:21:24 83

原创 Java并发队列(一)

本文主要介绍Java并发包提供的线程安全队列的相关核心类的用法,包括阻塞先入先出队列,如LinkedBlockQueue和ArrayBlockingQueue,阻塞先入先出双端队列BlockingDeque接口,并发队列ConcurrentLinkedQueue以及写时拷贝列表CopyOnWriteArrayList。ArrayList和LinkedList是Java在编程中最常用的两个列表类,其中ArrayList是基于数组实现的,LInkedList是基于链表实现的。

2023-11-07 12:39:29 41

原创 多线程对文件做加解密(线程池)

文件多线程加解密

2023-10-27 15:21:18 322

原创 ThreadPoolExecutor线程池的使用

ThreadPoolExecutor类的使用及小demo

2023-10-22 12:21:12 129

原创 ThreadLocal线程本地变量的使用

使用ThreadLocal对共享变量进行封装,可使该共享变量对其他线程不可见。每个线程都会有一个该共享变量的副本,线程对自己的变量副本操作,不会影响到其他线程。以达到线程隔离,线程安全的目的。

2023-10-21 15:04:18 69 1

原创 Java中,堆和栈的作用

堆是用于存储动态分配的内存空间,它是Java虚拟机所管理的内存中最大的一块。堆内存的分配策略通常是按需分配,即当需要一个对象时,会在堆中分配足够的内存空间来存储该对象。每个线程都有一个自己的栈,栈帧中存储了方法的局部变量、操作数栈和方法出口等信息。当一个方法被调用时,一个新的栈帧会被压入栈顶;栈内存的分配和释放是由编译器自动完成的,我们无需关心栈内存的管理。- 堆内存的分配和释放由垃圾回收器自动完成,而栈内存的分配和释放由编译器自动完成。- 堆内存的分配策略是按需分配,而栈内存的分配策略是预先分配。

2023-10-20 16:23:43 91 1

原创 volatile关键字

volatile关键字的使用及其特性

2023-10-20 12:51:43 66 1

原创 synchronized和wait()、notify()、notifyAll()的使用

使用synchronized关键字和wait()、notify()、notifyAll()方法

2023-10-19 16:51:42 256 1

原创 线程概念及原理

线程是CPU执行的最小单元,现在的CPU都是多核的,所以会多个核心同时执行多个CPU,这就是并发执行。

2023-10-19 12:31:19 72 1

原创 密码运算的实例代码(加解密、签名验签、MAC运算、摘要运算等)

实现了加解密(包含对称加解密及非对称密钥对的加解密)、签名、验签、哈希算法、MAC运算、密钥生成、随机数生成、非对称密钥对生成

2023-09-02 20:15:17 123

原创 PKCS7Padding的Java实现

使用java实现对称加密中的PKCS7Padding。可自由编写基于密码机的对称加解密算法

2023-08-18 15:28:55 2264 1

原创 redis详解

缓存穿透是指用户查询数据,在数据库中没有,自然在缓存中也没有。redis本质上是一个key/value类型的数据库,每个key都是字符串类型。指一个存在的热点key,同时接收大量的请求,一旦失效,则请求会直接请求数据库,导致数据库压力骤增。服务器重启后缓存数据清空,大量请求会直接查询数据库,造成缓存雪崩。禁用以上命令的具体做法为,修改redis.conf,在SECURITY项中,增加以下命令来实现禁用危险命令。缓存雪崩是指在某一段时间,大量缓存失效,导致大量的请求直接请求数据库。3.列表list类型。

2023-08-18 15:03:41 421 1

原创 SpringCloud之网关限流

限流是指在应用程序的网关层对传入的请求进行限制和控制,以保护后端服务免受过多的请求压力,防止系统过载和性能下降。通过限制请求的速率或总数,可以确保后端服务在可承受的范围内提供高质量的服务。

2023-07-14 11:37:45 393 1

原创 springCloud之熔断降级

熔断降级是通过对服务之间的依赖关系进行管理来实现的。当一个服务调用另一个服务时,如果被调用的服务出现故障或响应时间过长,调用方可以使用熔断器来中断对该服务的调用,从而避免整个系统的瘫痪。

2023-07-14 11:04:36 280 1

原创 springCloud之Gateway动态路由

学习gateway网关时,是以产品应用为目的,打算做一个类似于SAAS平台,网关负责统一的鉴权,日志记录,对外屏蔽真实的访问地址。路由信息也不能是写死在配置文件的,必须是提供管理页面可维护的。所以就略过配置文件,直接开启动态路由的实现。

2023-07-13 16:35:02 5305 4

原创 springCloud之服务发现与注册(nacos)

将一个大的项目拆分为多个小服务,服务拆分的颗粒度应按照业务需求,例如模块的读写频率,耦合度等。将服务统一交由nacos管理,可对性能有要求的服务做集群部署。当然服务太多也会影响维护,后续还需要学习Docker容器、K8s容器编排技术、服务的链路跟踪等。来保证服务的可持续运行及维护。启动后访问:http://localhost:8080/ca/echo/2023,即可得到服务提供方接口的返回结果。完成以上代码后,启动服务,可在nacos的服务管理--->服务列表菜单中看到该服务。添加需要依赖的jar包。

2023-07-13 12:01:28 261 1

原创 国密SM2的公私钥与BC库的格式转换

国密SM2公私钥一般为C语言的结构体转为java对象得到的。该场景一般是通过密码机生成的外部非对称密钥对。运算也是有密码机进行运算,但如果想脱离密码机,使用java语言进行签名验签、加解密等活动,该如何实现?本文以java的BC库为例,完成国密公私钥格式转换为BC库格式,然后通过Java的JCE框架完成签名、验签、加/解密等功能。

2023-07-12 11:58:04 3364 1

原创 springCloud之配置中心(nacos的配置管理)

配置可供多个服务使用,修改也只需修改一次即可,应用场景:多个服务连接的数据库相同,数据库配置只需改一次即可配置的热加载,修改后,无需重启服务就可以读取到修改后的数据。应用场景:如电商,遇到活动,修改配置参数至最大,提升服务性能。活动结束后,可修改配置回收部分硬件资源,用于其他使用,节省成本。

2023-07-12 11:26:36 891 1

原创 Java响应式编程Reactor

在onNext方法中,我们使用map操作算子将订单转换为需要请求的风控信息,然后使用filter操作算子对风险评估结果进行筛选,并使用flatMap操作算子向风控服务发送请求获取评估结果。接下来,我们需要实现消费者和操作算子。假设我们有一个订单系统,需要实现以下功能:当有新订单产生时,根据订单金额判断是否需要进行风险评估。在这个例子中,我们首先创建了一个订单发布者和一个订单处理器,并将它们连接起来。它提供了可观察的序列流和操作算子,允许开发人员按照事件流的方式编写代码,而不是按照传统的控制流方式。

2023-06-26 11:40:50 874 1

原创 密码算法组合使用,增强数据安全

公钥加密与哈希算法的组合:公钥加密算法,例如RSA,使用不同的秘钥来加密和解密数据,安全性较高。发送方可以通过哈希算法获得消息摘要,并使用其私钥对消息进行签名,以保证消息的完整性和可信度。哈希算法和盐值组合:哈希算法经常被用于加密存储密码,但单纯使用哈希函数加密容易受到彩虹表攻击。这样即使两个用户使用相同的密码,由于盐值不同,其最终储存在数据库中的密文也不同。密码算法的组合使用是一种加密技术,通过将多种密码算法结合在一起使用,可以提高加密强度和安全性,以防止恶意攻击者破解数据的可能性。

2023-05-24 15:44:45 427 1

原创 自定义实现bouncycastle的ContentSigner接口

因签发证书、生成证书请求文件(PKCS10)时,会对主体做签名,而我们公司使用的是服务器密码机做签名,无法使用bouncycastle提供的实现类完成签名。故此,需要自己对ContentSigner接口进行实现,重写签名接口“getSignature()”方法。

2023-05-24 10:51:25 354

原创 密码学简介

密码体制主要包括对称密钥加密、非对称密钥加密、哈希函数、消息鉴别码等算法和技术,使用不同的方法进行数据的加密和解密,从而达到保护信息安全的目的。非对称密钥加密算法包括RSA、DSA等,RSA是一种常用的加密算法,其特点是速度比较快,加解密的数字规模可以达到2048位。其中,TLS和SSL协议是最常见的Web安全协议,可以保护Web应用程序的安全性,防止信息被截取和篡改。在实际应用中,需要根据不同的应用场景和需求选择适当的加密算法和协议,确保信息的安全性。常用的数字签名算法包括RSA、DSA、ECDSA等。

2023-05-22 15:47:47 168 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除