1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-08-01 16:28:03 +08:00

Compare commits

...

6 Commits

Author SHA1 Message Date
skeetyu
e3e3c03f9c
Merge 69d6de121c2dcb74d0a3ca284d5505e3665cd93a into 164f98c74f1c9612736ab1def5010dfa9f376811 2024-01-04 06:25:47 -08:00
Guide
164f98c74f [docs update]完善对哈希算法的介绍 2024-01-04 21:12:31 +08:00
Guide
d49af05a16 [docs update]完善对SSE的介绍
ChatGPT 采用的就是 SSE
2024-01-04 14:40:03 +08:00
Guide
30157a3152 [docs update]添加几个AI相关的开源项目 2024-01-04 14:39:34 +08:00
skeetyu
69d6de121c Merge branch 'main' of github.com:skeetyu/JavaGuide 2023-12-29 15:27:23 +08:00
skeetyu
1d40675688 Add navbarAutoHide 2023-12-29 15:25:21 +08:00
6 changed files with 37 additions and 24 deletions

View File

@ -6,11 +6,6 @@
[![logo](https://oss.javaguide.cn/github/javaguide/csdn/1c00413c65d1995993bf2b0daf7b4f03.png)](https://github.com/Snailclimb/JavaGuide)
[![阅读](https://img.shields.io/badge/阅读-read-brightgreen.svg)](https://javaguide.cn/)
![Stars](https://img.shields.io/github/stars/Snailclimb/JavaGuide)
![forks](https://img.shields.io/github/forks/Snailclimb/JavaGuide)
![issues](https://img.shields.io/github/issues/Snailclimb/JavaGuide)
[GitHub](https://github.com/Snailclimb/JavaGuide) | [Gitee](https://gitee.com/SnailClimb/JavaGuide)
</div>

View File

@ -24,6 +24,7 @@ export default hopeTheme({
pure: true,
breadcrumb: false,
navbar,
navbarAutoHide: "always",
sidebar,
footer:
'<a href="https://beian.miit.gov.cn/" target="_blank">鄂ICP备2020015769号-1</a>',

View File

@ -1,10 +1,14 @@
---
title: Java 优质开源机器学习项目
title: Java 优质开源 AI 项目
category: 开源项目
icon: a-MachineLearning
---
- **[Deeplearning4j](https://github.com/eclipse/deeplearning4j)**Deeplearning4j 是第一个为 Java 和 Scala 编写的商业级,开源,分布式深度学习库。
- **[Smile](https://github.com/haifengl/smile)**:基于 Java 和 Scala 的机器学习库。
由于 Java 在 AI 领域应用较少,因此相关的开源项目也非常少:
相关阅读:[Java 能用于机器学习和数据科学吗?-InfoQ](https://www.infoq.cn/article/GA9UeYlv8ohBzBso9eph)
- [Spring AI](https://github.com/spring-projects/spring-ai):人工智能工程应用框架,为开发 AI 应用程序提供了 Spring 友好的 API 和抽象。
- [Deeplearning4j](https://github.com/eclipse/deeplearning4j)Deeplearning4j 是第一个为 Java 和 Scala 编写的商业级,开源,分布式深度学习库。
- [Smile](https://github.com/haifengl/smile):基于 Java 和 Scala 的机器学习库。
- [GdxAI](https://github.com/libgdx/gdx-ai):完全用 Java 编写的人工智能框架,用于使用 libGDX 进行游戏开发。
- [chatgpt-java](https://github.com/Grt1228/chatgpt-java)ChatGPT Java SDK。
- [ai-beehive](https://github.com/hncboy/ai-beehive)AI 蜂巢,基于 Java 使用 Spring Boot 3 和 JDK 17支持的功能有 ChatGPT、OpenAi Image、Midjourney、NewBing、文心一言等等。

View File

@ -346,7 +346,7 @@ Spring 框架中用到了哪些设计模式?
- 《Spring 技术内幕》
- <https://blog.eduonix.com/java-programming-2/learn-design-patterns-used-spring-framework/>
- <http://blog.yeamin.top/2018/03/27/单例模式-Spring%20单例实现原理分析/>
- <http://blog.yeamin.top/2018/03/27/单例模式-Spring%20 单例实现原理分析/>
- <https://www.tutorialsteacher.com/ioc/inversion-of-control>
- <https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/observer.html>
- <https://juejin.im/post/5a8eb261f265da4e9e307230>

View File

@ -16,7 +16,7 @@ tag:
## 哈希算法
哈希算法也叫哈希函数、散列函数或摘要算法,它的作用是对任意长度的数据生成一个固定长度的唯一标识,也叫哈希值、散列值或消息摘要(后文统称为哈希值)。
哈希算法也叫哈希算法、散列函数或摘要算法,它的作用是对任意长度的数据生成一个固定长度的唯一标识,也叫哈希值、散列值或消息摘要(后文统称为哈希值)。
![哈希算法效果演示](https://oss.javaguide.cn/github/javaguide/system-design/security/encryption-algorithms/hash-function-effect-demonstration.png)
@ -24,25 +24,32 @@ tag:
举两个实际的例子:
- 我们下载一个文件时,可以通过比较文件的哈希值和官方提供的哈希值是否一致,来判断文件是否被篡改或损坏;
- 保存密码到数据库时使用哈希算法进行加密,可以通过比较用户输入密码的哈希值和数据库保存的哈希值是否一致,来判断密码是否正确。
- 我们下载一个文件时,可以通过比较文件的哈希值和官方提供的哈希值是否一致,来判断文件是否被篡改或损坏;
这种算法的特点是不可逆:
- 不能从哈希值还原出原始数据。
- 原始数据的任何改变都会导致哈希值的巨大变化。
哈希算法主要下面几类:
哈希算法分为两类:
- MDMessage Digest消息摘要算法比如 MD5。
- SHASecure Hash Algorithm安全哈希算法比如 SHA-1、SHA-256。
- MACMessage Authentication Code消息认证码算法比如 HMAC(Hash Message Authentication Code)。
- 其他国密算法SM3、密码哈希算法Bcrypt
- **加密哈希算法**安全性较高的哈希算法它可以提供一定的数据完整性保护和数据防篡改能力能够抵御一定的攻击手段安全性相对较高适用于对安全性要求较高的场景。例如SHA-256、SHA-512、SM3、Bcrypt 等等。
- **非加密哈希算法**安全性相对较低的哈希算法易受到暴力破解、冲突攻击等攻击手段的影响但性能较高适用于对安全性没有要求的业务场景。例如CRC32、MurMurHash3 等等。
常见的哈希算法有:
- MDMessage Digest消息摘要算法MD2、MD4、MD5 等,已经不被推荐使用。
- SHASecure Hash Algorithm安全哈希算法SHA-1 系列安全性低SHA2SHA3 系列安全性较高。
- 国密算法:例如 SM2、SM3、SM4其中 SM2 为非对称加密算法SM4 为对称加密算法SM3 为哈希算法(安全性及效率和 SHA-256 相当,但更适合国内的应用环境)。
- Bcrypt密码哈希算法基于 Blowfish 加密算法的密码哈希算法,专门为密码加密而设计,安全性高。
- MACMessage Authentication Code消息认证码算法HMAC 是一种基于哈希的 MAC可以与任何安全的哈希算法结合使用例如 SHA-256。
- CRCCyclic Redundancy Check循环冗余校验CRC32 是一种 CRC 算法,它的特点是生成 32 位的校验值,通常用于数据完整性校验、文件校验等场景。
- SipHash加密哈希算法它的设计目的是在速度和安全性之间达到一个平衡用于防御[哈希泛洪 DoS 攻击](https://aumasson.jp/siphash/siphashdos_29c3_slides.pdf)。Rust 默认使用 SipHash 作为哈希算法,从 Redis4.0 开始,哈希算法被替换为 SipHash。
- MurMurHash经典快速的非加密哈希算法目前最新的版本是 MurMurHash3可以生成 32 位或者 128 位哈希值;
- ……
国密算法常见的如 SM2、SM3、SM4其中 SM2 为非对称加密算法SM4 为对称加密算法SM3 为哈希算法(安全性及效率和 SHA-256 相当,但更适合国内的应用环境)。
哈希算法一般是不需要密钥的但也存在部分特殊哈希算法需要密钥。例如MAC 算法就是一种基于密钥的哈希算法,它在哈希算法的基础上增加了一个密钥,使得只有知道密钥的人才能验证数据的完整性和来源。
哈希算法一般是不需要密钥的但也存在部分特殊哈希算法需要密钥。例如MAC 和 SipHash 就是一种基于密钥的哈希算法,它在哈希算法的基础上增加了一个密钥,使得只有知道密钥的人才能验证数据的完整性和来源。
### MD
@ -82,13 +89,13 @@ SHA-256 Hash: fb246796f5b1b60d4d0268c817c608fa
### SHA
SHASecure Hash Algorithm系列算法是一组密码哈希函数用于将任意长度的数据映射为固定长度的哈希值。SHA 系列算法由美国国家安全局NSA于 1993 年设计,目前共有 SHA-1、SHA-2、SHA-3 三种版本。
SHASecure Hash Algorithm系列算法是一组密码哈希算法用于将任意长度的数据映射为固定长度的哈希值。SHA 系列算法由美国国家安全局NSA于 1993 年设计,目前共有 SHA-1、SHA-2、SHA-3 三种版本。
SHA-1 算法将任意长度的数据映射为 160 位的哈希值。然而SHA-1 算法存在一些严重的缺陷比如安全性低容易受到碰撞攻击和长度扩展攻击。因此SHA-1 算法已经不再被推荐使用。 SHA-2 家族(如 SHA-256、SHA-384、SHA-512 等)和 SHA-3 系列是 SHA-1 算法的替代方案,它们都提供了更高的安全性和更长的哈希值长度。
SHA-2 家族是在 SHA-1 算法的基础上改进而来的,它们采用了更复杂的运算过程和更多的轮次,使得攻击者更难以通过预计算或巧合找到碰撞。
为了寻找一种更安全和更先进的密码哈希函数美国国家标准与技术研究院National Institute of Standards and Technology简称 NIST在 2007 年公开征集 SHA-3 的候选算法。NIST 一共收到了 64 个算法方案,经过多轮的评估和筛选,最终在 2012 年宣布 Keccak 算法胜出,成为 SHA-3 的标准算法SHA-3 与 SHA-2 算法没有直接的关系)。 Keccak 算法具有与 MD 和 SHA-1/2 完全不同的设计思路即海绵结构Sponge Construction使得传统攻击方法无法直接应用于 SHA-3 的攻击中(能够抵抗目前已知的所有攻击方式包括碰撞攻击、长度扩展攻击、差分攻击等)。
为了寻找一种更安全和更先进的密码哈希算法美国国家标准与技术研究院National Institute of Standards and Technology简称 NIST在 2007 年公开征集 SHA-3 的候选算法。NIST 一共收到了 64 个算法方案,经过多轮的评估和筛选,最终在 2012 年宣布 Keccak 算法胜出,成为 SHA-3 的标准算法SHA-3 与 SHA-2 算法没有直接的关系)。 Keccak 算法具有与 MD 和 SHA-1/2 完全不同的设计思路即海绵结构Sponge Construction使得传统攻击方法无法直接应用于 SHA-3 的攻击中(能够抵抗目前已知的所有攻击方式包括碰撞攻击、长度扩展攻击、差分攻击等)。
由于 SHA-2 算法还没有出现重大的安全漏洞,而且在软件中的效率更高,所以大多数人还是倾向于使用 SHA-2 算法。
@ -125,7 +132,7 @@ SHA-256 Hash: 184eb7e1d7fb002444098c9bde3403c6f6722c93ecfac242c0e35cd9ed3b41cd
### Bcrypt
Bcrypt 算法是一种基于 Blowfish 加密算法的密码哈希函数,专门为密码加密而设计,安全性高。
Bcrypt 算法是一种基于 Blowfish 加密算法的密码哈希算法,专门为密码加密而设计,安全性高。
由于 Bcrypt 采用了 salt 和 cost成本 两种机制它可以有效地防止彩虹表攻击和暴力破解攻击从而保证密码的安全性。salt 是一个随机生成的字符串用于和密码混合增加密码的复杂度和唯一性。cost 是一个数值参数,用于控制 Bcrypt 算法的迭代次数,增加密码哈希的计算时间和资源消耗。
@ -353,6 +360,8 @@ DSA 算法签名过程:
## 参考
- 深入理解完美哈希 - 腾讯技术工程https://mp.weixin.qq.com/s/M8Wcj8sZ7UF1CMr887Puog
- 写给开发人员的实用密码学(二)—— 哈希函数https://thiscute.world/posts/practical-cryptography-basics-2-hash/
- 奇妙的安全旅行之 DSA 算法:<https://zhuanlan.zhihu.com/p/347025157>
- AES-GCM 加密简介:<https://juejin.cn/post/6844904122676690951>
- Java AES 256 GCM Encryption and Decryption Example | JCE Unlimited Strength<https://www.javainterviewpoint.com/java-aes-256-gcm-encryption-and-decryption/>

View File

@ -189,10 +189,14 @@ iframe 流的服务器开销很大,而且 IE、Chrome 等浏览器一直会处
iframe 流非常不友好,强烈不推荐。
### SSE (我的方式)
### SSE (推荐)
很多人可能不知道,服务端向客户端推送消息,其实除了可以用`WebSocket`这种耳熟能详的机制外,还有一种服务器发送事件(Server-Sent Events),简称 SSE。这是一种服务器端到客户端(浏览器)的单向消息推送。
大名鼎鼎的 ChatGPT 就是采用的 SSE。对于需要长时间等待响应的对话场景ChatGPT 采用了一种巧妙的策略:它会将已经计算出的数据“推送”给用户,并利用 SSE 技术在计算过程中持续返回数据。这样做的好处是可以避免用户因等待时间过长而选择关闭页面。
![ChatGPT 使用 SSE 实现对话](https://oss.javaguide.cn/github/javaguide/system-design/web-real-time-message-push/chatgpt-sse.png)
SSE 基于 HTTP 协议的,我们知道一般意义上的 HTTP 协议是无法做到服务端主动向客户端推送消息的,但 SSE 是个例外,它变换了一种思路。
![](https://oss.javaguide.cn/github/javaguide/system-design/web-real-time-message-push/1460000042192390.png)