自身有一套OA源码,在windows开发和部署都没有问题,在linux和os里面就无法部署一致爆无法解密,找了很多方法,因为本身项目中用的rcs的方式以为是加密java的jdk版本换了跟windows一样还是不可以。
在Linux操作系统中,有一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器。
/dev/random
在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random的读操作将会被阻塞,直到从别的设备中收集到了足够的环境噪声为止。
当然你也可以设置成不堵塞,当你在open 的时候设置参数O_NONBLOCK, 但是当你read的时候,如果熵池空了,会返回-1
/dev/urandom
/dev/random的一个副本是/dev/urandom ("unlocked",非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。
Linux下设置随机数
/proc/sys/kernel/random
在此目录下,可以配置/dev/random的参数
Poolsize
The file poolsize gives the size of the entropy pool
Read-wakeup_threadhold
The file read_wakeup_threshold contains the number of bits ofentropy required for waking up processes that sleep waiting for entropy from /dev/random. The default is 64.
write_wakeup_threshold
The filewrite_wakeup_threshold contains the number of bits of entropy below which wewake up processes that do a select(2) or poll(2) for write access to /dev/random.
在JAVA中的配置发生器
在Java中可以通过两种方式去设置指定的随机数发生器
1. 在tomcat下catalina.sh中最上边添加
-Djava.security.egd=file:/dev/random或者 -Djava.security.egd=file:/dev/urandom
2. 修改jvm的计算方式
修改配置文件java.security 在jvm_home\jre\lib\security
参数securerandom.source=file:/dev/urandom
/dev/random 是堵塞的,在读取随机数的时候,当熵池值为空的时候会堵塞影响性能,尤其是系统大并发的生成随机数的时候,如果在随机数要求不高的情况下,可以去读取/dev/urandom
整个流程如下:
JAVA中首先读取系统参数java.security.egd,如果值为空的时候,读取java.security配置文件中的参数securerandom.source, 在通常情况下,就是读取参数securerandom.source,默认值是/dev/urandom,也就是因该是不堵塞的。
但实际情况是,在测试linux环境下的时候,你会发现默认值却是堵塞的。
相关推荐
这个DESEncrypt工具类是针对Windows和Linux系统设计的,确保在不同操作系统下都能进行一致的加密和解密操作,避免因环境差异导致的解密失败问题。主要关注点在于如何在不同系统中生成一致的随机数种子,以确保加密...
Java AES 加解密在Linux环境中的问题主要集中在加解密过程中的不兼容性,这通常是由平台差异或安全参数配置不当引起的。在Windows系统上能够正常进行加解密,但在Linux系统中出现解密异常,报错信息为“Given final ...
Java 中使用公钥加密私钥解密原理实现 License 控制是指在 Java 应用程序中使用公钥加密、私钥解密机制来实现 License 文件的控制。这种机制可以用来限制系统的使用,例如限制试用期、限制用户数量、限制 IP 地址等...
`SecureRandom`类是Java和Android中用于生成随机数的重要工具,它通常被用于密码学中的密钥生成、初始化向量(IV)的创建以及其他安全性相关的需求。然而,原生的`SecureRandom`在某些版本的Android上可能存在性能...
在Java中实现AES(Advanced Encryption Standard)加密和解密算法主要涉及到对称密钥加密技术。AES算法是一种块密码,采用固定大小的128位(16字节)块进行加密和解密,支持128、192和256位的密钥长度。在给定的代码...
在Java编程语言中,加密算法是信息安全领域的重要组成部分,用于保护数据的隐私和安全。本文将详细介绍Java中常见的加密算法的实现,以及如何在JDK 1.8环境下进行操作。 1. **对称加密算法** 对称加密是最基础的...
* 该实现在 windows 上每次生成的 key 都相同, * 但是在 solaris 或部分 linux 系统上则不同。 * 所以 SecureRandom securerandom = new SecureRandom(tohash256Deal(key)); 替换为下面内容 * 以适应linux的...
在Java中,`sun.misc.BASE64Encoder` 和 `sun.misc.BASE64Decoder` 类可用于Base64编码和解码,但需要注意的是,这些类不是Java标准库的一部分,可能在某些Java版本中不可用。推荐使用Java 8引入的`java.util.Base64...
3. **Java中的加密API**:Java提供了`java.security.SecureRandom`类生成随机数,`javax.crypto.Cipher`类进行加密和解密操作。RC4在Java中属于`Cipher`类的一部分,可以通过`Cipher.getInstance("RC4")`获取。 4. ...
在实现层面,Java使用了两种主要的技术:权限(Permissions)和访问控制上下文(Access Control Context)。权限代表了一种系统资源或操作的访问权,每个权限都有一个名称和一个类别。访问控制上下文则是当前线程的...
可以修改 Linux 上 Weblogic 使用的 JDK 的安全配置文件 $JAVA_HOME/jre/lib/security/java.security,将“securerandom.source=file:/dev/urandom”修改为“securerandom.source=file:/dev/./urandom”。...
在IT行业中,安全通信是至关重要的,特别是在前端与后端之间的数据交互。本文将详细介绍一个实际案例:如何在前端使用JavaScript库`jsencrypt`进行RSA加密,并在后端使用Java进行解密。这个功能实现的核心知识点包括...
"java 使用 Google 身份验证器实现动态口令验证的示例" 本篇文章主要介绍了使用 Java 语言实现 Google 身份验证器来实现动态口令验证的示例代码。Google 身份验证器是一种基于时间的单次密码(TOTP)算法,能够生成...
在Java中实现AES加密,我们可以利用Java Cryptography Extension (JCE) 提供的相关类库。 AES加密的基本步骤包括: 1. **密钥生成**:AES支持128位、192位和256位三种密钥长度。在Java中,我们可以使用`javax....
在Java中,我们可以使用`java.security.SecureRandom`类来生成随机数,作为密钥流的种子。同时,我们可以自定义一个类,如`StreamCipher`,用于管理加密和解密过程。`StreamCipher`类需要包含以下关键方法: 1. **...
### Java 实现 DES 加密解密算法详解 #### 一、引言 DES(Data Encryption Standard,数据加密标准)是一种广泛使用的对称加密算法。它最初由IBM开发,并于1977年被美国国家标准局采纳为官方加密标准。DES算法使用...
在Java中,使用HttpURLConnection类可以实现Http和Https请求,但是对于Https请求,需要进行SSL验证,以确保数据的安全性。下面我们将详细介绍如何实现Https请求的工具类。 首先,需要引入相关的Java包,包括java....
在Java中,我们可以使用Java Cryptography Extension (JCE) 来实现RSA的加解密操作。JCE是Java平台的一部分,它提供了一套强大的加密API,包括对称、非对称以及哈希算法。 首先,我们需要生成RSA密钥对。这通常通过...
Java 2平台安全技术是Java开发中的核心领域,它涵盖了如何在Java环境中构建安全、可靠的软件系统。这个主题包括了Java安全模型的结构、API的设计与实现,以及相关的安全策略和管理机制。以下是对这些知识点的详细...
标注使用java.security.SecureRandom在策略Apigee Edge代理内生成随机数(int,UUID或高斯值),并使用该信息设置上下文变量。免责声明此示例不是正式的Google产品,也不是正式的Google产品的一部分。使用此标注您...