Java中的数据加密与解密技术

1.JAVA加解密-基础篇 一.发展历史 1.1 古典密码学 凯撒密码,滚筒密码 1.2 近代密码学 Enigma机 1.3 现代密码学 二. 编码算法 2.1 Base64 2.2 URL编码 三. 摘要算法 3.1 定义 3.2 应用场景 3.3 常见算法 四. 对称机密算法 4.1 定义 4.2 常见算法 4.3 分类 4.4 块加密常用的加密模式 4.5块加密常用的填充模式 五. 非对称加密算法 5.1 定义 . 阅读详情

Java中的数据加密与解密技术

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨Java中的数据加密与解密技术。

一、数据加密与解密的基本概念

数据加密与解密是保护敏感信息的重要手段,通过将明文数据转换为密文,防止未经授权的访问。在Java中,我们常用的加密算法包括对称加密算法(如AES)和非对称加密算法(如RSA)。对称加密使用相同的密钥进行加密和解密,而非对称加密使用一对密钥(公钥和私钥)进行加密和解密。

二、对称加密算法:AES

AES(Advanced Encryption Standard)是一种常见的对称加密算法。以下是使用AES进行加密和解密的示例代码:

package cn.juwatech.encryption;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AesEncryption {

    private static final String ALGORITHM = "AES";

    // 生成AES密钥
    public static SecretKey generateKey() throws Exception {
        KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
        keyGen.init(256); // 可以选择128, 192, 256位的密钥
        return keyGen.generateKey();
    }

    // 加密
    public static String encrypt(String data, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    // 解密
    public static String decrypt(String encryptedData, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        byte[] decryptedData = cipher.doFinal(decodedData);
        return new String(decryptedData);
    }

    public static void main(String[] args) {
        try {
            String data = "Hello, World!";
            SecretKey key = generateKey();
            
            String encryptedData = encrypt(data, key);
            System.out.println("Encrypted Data: " + encryptedData);
            
            String decryptedData = decrypt(encryptedData, key);
            System.out.println("Decrypted Data: " + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、非对称加密算法:RSA

RSA(Rivest–Shamir–Adleman)是一种常见的非对称加密算法。以下是使用RSA进行加密和解密的示例代码:

package cn.juwatech.encryption;

import javax.crypto.Cipher;
import java.security.*;
import java.util.Base64;

public class RsaEncryption {

    private static final String ALGORITHM = "RSA";

    // 生成RSA密钥对
    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);
        keyGen.initialize(2048);
        return keyGen.generateKeyPair();
    }

    // 加密
    public static String encrypt(String data, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    // 解密
    public static String decrypt(String encryptedData, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        byte[] decryptedData = cipher.doFinal(decodedData);
        return new String(decryptedData);
    }

    public static void main(String[] args) {
        try {
            String data = "Hello, World!";
            KeyPair keyPair = generateKeyPair();
            
            String encryptedData = encrypt(data, keyPair.getPublicKey());
            System.out.println("Encrypted Data: " + encryptedData);
            
            String decryptedData = decrypt(encryptedData, keyPair.getPrivateKey());
            System.out.println("Decrypted Data: " + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

四、结合使用AES和RSA

为了同时利用对称加密的高效性和非对称加密的安全性,通常会将两者结合使用,即使用RSA加密AES密钥,使用AES加密实际数据。以下是结合使用AES和RSA的示例代码:

package cn.juwatech.encryption;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import java.util.Base64;

public class HybridEncryption {

    private static final String AES_ALGORITHM = "AES";
    private static final String RSA_ALGORITHM = "RSA";

    // 生成AES密钥
    public static SecretKey generateAesKey() throws Exception {
        KeyGenerator keyGen = KeyGenerator.getInstance(AES_ALGORITHM);
        keyGen.init(256);
        return keyGen.generateKey();
    }

    // 生成RSA密钥对
    public static KeyPair generateRsaKeyPair() throws Exception {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance(RSA_ALGORITHM);
        keyGen.initialize(2048);
        return keyGen.generateKeyPair();
    }

    // 使用AES加密数据
    public static String encryptData(String data, SecretKey aesKey) throws Exception {
        Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, aesKey);
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    // 使用RSA加密AES密钥
    public static String encryptAesKey(SecretKey aesKey, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedKey = cipher.doFinal(aesKey.getEncoded());
        return Base64.getEncoder().encodeToString(encryptedKey);
    }

    // 使用RSA解密AES密钥
    public static SecretKey decryptAesKey(String encryptedAesKey, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decodedKey = Base64.getDecoder().decode(encryptedAesKey);
        byte[] decryptedKey = cipher.doFinal(decodedKey);
        return new SecretKeySpec(decryptedKey, AES_ALGORITHM);
    }

    // 使用AES解密数据
    public static String decryptData(String encryptedData, SecretKey aesKey) throws Exception {
        Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, aesKey);
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        byte[] decryptedData = cipher.doFinal(decodedData);
        return new String(decryptedData);
    }

    public static void main(String[] args) {
        try {
            String data = "Hello, World!";
            KeyPair rsaKeyPair = generateRsaKeyPair();
            SecretKey aesKey = generateAesKey();

            String encryptedData = encryptData(data, aesKey);
            String encryptedAesKey = encryptAesKey(aesKey, rsaKeyPair.getPublicKey());

            System.out.println("Encrypted Data: " + encryptedData);
            System.out.println("Encrypted AES Key: " + encryptedAesKey);

            SecretKey decryptedAesKey = decryptAesKey(encryptedAesKey, rsaKeyPair.getPrivateKey());
            String decryptedData = decryptData(encryptedData, decryptedAesKey);

            System.out.println("Decrypted Data: " + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

五、总结

本文详细介绍了在Java中实现数据加密与解密的几种常见技术,包括对称加密算法(AES)、非对称加密算法(RSA)以及结合使用AES和RSA的混合加密技术。这些技术可以有效地保护数据的安全性,防止未经授权的访问。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

Java:对称加密算法总结 在加密过程中,需要自定义函数decrypt进行解密处理。在加密/解密的过程中,需要创建Cipher对象.传入加密使用的算法,工作模式,填充模式。对称加密算法:指用一个秘钥进行加密和解密。加密就是接收秘钥和原文,返回密文。对称加密算法中的秘钥是一个自己给定的、固定长度(16字节)的。CBC工作模式比ECB工作模式多了个参数,需要生成一个16字节的随机数作为IV参数。2、AES加密+CBC工作模式(安全性较高):同一个秘钥和原文,因为IV参数的随机产生,所以每次生成的密文都不一样。 阅读详情

相关推荐

Mybatis数据加密解密

类注解,将注解放在实体类上/*** 需要加解密的类注解*/@Inherited字段注解,将注解放在实体字段上/*** 加密字段注解*/@Inherited有了这两个注解,我们可以在我们可以标记我们要处理的实体和实体中的字段。

lvyuanj的专栏 3194

JAVA各种加密与解密方式

信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。//信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。/*** @param input 明文* @param algorithm 算法 MD5 | sha-1 SHA-256 |* @return 密文 Base64 & Hex*///0xff是16进制数,这个刚好8位都是1的二进制数,而且转成int类型的时候,高位会补0//只取得低八位。

【有梦想的菜】的博客 1万+

Java非对称加密:RSA 数据加密与解密、数字签名与验签

非对称加密(asymmetric cryptography),也称为公开密钥加密(public-key cryptography),是密码学中的一种重要算法。非对称加密使用一对密钥进行加密和解密操作,这两个密钥分别是公开密钥(public key)和私有密钥(private key)。公开密钥可以公开给任何人使用,而私有密钥则必须保密,只有密钥的持有者才能访问。这两个密钥之间存在数学上的联系,但不能从一个推导出另一个。

pan_junbiao的博客 2034

java多种加密和解密方式

Base64 编码是我们程序开发中经常使用到的编码方法,它用 64 个可打印字符来表示二进制数据。这 64 个字符是:小写字母 a-z、大写字母 A-Z、数字 0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是 65 个字符),其他所有符号都转换成这个字符集中的字符。Base64 编码通常用作存储、传输一些二进制数据编码方法,所以说它本质上是一种将二进制数据转成文本数据的方案

guanshengg的博客 1万+

Java中的数据加密与解密:使用JCE实现安全的数据存储与传输

Java Cryptography Extension(JCE)是Java平台中用于实现加密和解密的关键组件,它提供了一组加密算法和工具,可以帮助我们实现安全的数据存储与传输。通过使用Java Cryptography Extension(JCE),我们可以有效地实现数据的加密和解密,确保数据在存储和传输过程中的安全性。在存储数据时,通常需要加密数据,然后将加密后的数据存储在数据库或文件系统中。在解密过程中,我们将加密的文本从Base64解码,然后用相同的密钥和IV进行解密,得到原始的明文数据。

技术研究中心 1233

实现Java应用的数据加密与解密技术

Java提供了丰富的加密算法支持,可以通过标准的Java加密架构(Java Cryptography Architecture,JCA)和Java加密扩展(Java Cryptography Extension,JCE)来实现各种加密需求。通过本文,你了解了在Java应用中实现数据加密与解密的重要性以及使用对称和非对称加密算法的示例。在Java应用中,数据加密和解密技术扮演着关键角色,用于保护敏感信息免受未经授权的访问和恶意攻击。在此示例中,生成了RSA密钥对,并使用公钥加密和私钥解密文本数据。

微赚开发者技术分享博客 385

解析Java中的数据加密与解密技术

数据加密是信息安全领域中的重要技术,通过对数据进行加密可以保护数据的安全性,防止数据被未授权的访问者窃取或篡改。非对称加密算法使用一对密钥,公钥和私钥,公钥用于加密数据,私钥用于解密数据。首先生成RSA密钥对,然后使用公钥进行加密,私钥进行解密,并输出加密后的密文和解密后的明文。首先生成AES密钥,然后使用该密钥进行加密和解密操作,并输出加密后的密文和解密后的明文。除了对称和非对称加密算法,Java还提供了消息摘要算法用于生成消息摘要(哈希值),常见的消息摘要算法有MD5、SHA-1、SHA-256等。

微赚淘客开发者博客 477

Java 加密算法:对称加密和非对称加密总结

RSA 非对称加密, AES 对称加密

u013558123的博客 3470

Java应用中的数据加密与解密技术详解

消息摘要算法(也称为哈希算法)用于生成数据的唯一指纹。常见的算法有MD5和SHA系列。

weixin_53840353的博客 674

守护物联网安全:深入探讨Java中的数据加密与解密技术

在当今数字化的世界里,物联网(IoT)设备的广泛应用正在改变我们的生活方式。然而,随着这些设备数量的增长,保护它们免受黑客攻击和数据泄露的风险变得至关重要。数据加密作为保障信息安全的重要手段之一,在IoT设备的安全策略中占据核心地位。本文将带您深入了解如何使用Java实现高效的数据加密与解密,为您的IoT项目构建坚固的安全屏障。

墨夶的博客 470

Java 加密与解密:从算法到应用的全面解析

在当今数字化时代,数据安全至关重要。Java 加密与解密技术作为保障数据安全的关键手段,被广泛应用于各个领域。加密是将明文数据通过特定算法转换为密文,使得即使数据被截获,攻击者也难以获取原始信息。而解密则是加密的逆过程,将密文还原为明文。

shrgegrb的博客 791

Java 加密解密之对称加密算法AES

Java 加密解密之对称加密算法AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并...

weixin_30608503的博客 83

lgv20刷twrp_LG港版v20 root

这是LG港版v20 root,整理了一下有关LG港版v20的官方固件包了,有没有需要的呢,这里把固件包整理一下也是方便大家以后好下载了,因此有一些机友还是不知道在哪里下载官方的rom包,在这里说的固件rom包也就是原版的系统包了,大家可以放心的使用,这些系统包也都是支持线刷的,大家下载下来解压出来根据里面的相关教程来操作就可以了,很简单的,如果你也需要的话就一起来看看吧。软件提示注意!! 此过程会...

weixin_33212263的博客 5387

Java开发者必看的物联网安全指南(设备认证与数据加密最佳实践)

掌握Java物联网设备管理中的安全核心,本文详解设备认证与数据加密最佳实践,涵盖身份验证、TLS通信、密钥管理等关键方法,适用于智能家居、工业监控等场景。提升系统安全性,防范数据泄露风险,Java开发者必看,值得收藏。

CompiLume的博客 731

python批量生成CAD图纸

python批量生成CAD图纸

轩逸云的博客 1万+

Maya ACES工作流程配置(Arnold 及 RedShift 贴图配置规范-还原出SP-Aces流程下贴图正确的效果) PS还原Aces流程下渲染的图

*如果使用SP,项目工程如果新建的时候设置的就是Aces的流程的话,按规范正常导出即可,贴图会带上相对应的后缀,然后贴图导入材质球的时候会根据后缀自动设置相对应的色彩空间;**万一不是,就自己手动设置一下对应的色彩空间即可;然后点击选择当前的或者选择全部导入的贴图,点击右下角后,开始转换;我复制了一下,一个默认没有LUT的效果,然后另外一个是加载2个LUT后的还原效果,和渲染的效果应该是没有区别的,至少我没有看出明显的区别;把需要转换的贴图拖拽到左侧,然后右面选择需要转换到的相对应的色彩空间;...

Yuulily 7992

20145337实验五Java网络编程及安全

20145337实验五Java网络编程及安全 20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器,结对编程一人负责客户端,一人负责服务器 使用Git进行版本控制 选择对称算法进行数据加解密 选择...

weixin_33939843的博客 95

手把手教你用Anaconda安装李沐d2l-zh包(附常见报错解决方案)

本文提供了一份详尽的Anaconda环境下安装李沐d2l-zh包的实战指南。文章从创建虚拟环境、配置国内镜像源加速下载入手,分步讲解核心依赖的预安装策略,并重点剖析了安装过程中常见的报错及其解决方法,旨在帮助初学者和开发者高效、稳定地搭建深度学习实验环境。

efc1234567的博客 1010

Java中的数据加密与解密:从基础到云原生实践

Java通过、Spring Security Crypto和Vault实现高效安全的数据加密与解密。支付系统案例展示QPS达10万,加密延迟降至10ms,安全性99.999%。使用AES-GCM进行高效加密。集成Vault管理密钥。部署Kubernetes动态扩展。使用Prometheus监控性能。结合虚拟线程和ZGC优化并发。数据加密是Java应用安全的核心,未来将在量子安全和Serverless方向持续演进。

lssffy的博客 1384

OpenClaw进阶实战(五):多模态能力扩展——让OpenClaw看懂图片、听懂语音

本文介绍了如何在OpenClaw中实现多模态能力,包括图像文字识别(OCR)、图像描述和语音识别(ASR)三种技能。通过PaddleOCR、BLIP和Whisper等开源工具,可以本地化部署这些功能,保护数据隐私。文章详细展示了三个独立技能模块的实现代码,并提出了一个"多模态智能管家"方案,能自动识别消息类型(文本/图片/语音)并调用相应处理技能。该方案适用于电商客服、会议纪要等真实业务场景,使AI助手具备"眼睛"和"耳朵"的多模态交互能力。

PeterPan的博客 160

Cesium功能集(十二):Cesium中流体仿真

【代码】Cesium功能集(十二):Cesium中流体仿真。

GIS肆月 600

使用Java实现数据加密与解密

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!数据加密在现代应用中至关重要,确保数据在传输和存储过程中不被未授权的第三方访问。在对称加密算法(如AES)中,我们需要一个密钥来加密和解密数据。首先,我们需要引入Java加密扩展(JCE)相关的包,这些包包含了加密、解密所需的类和方法。我们可以将上述加密和解密过程封装到工具类中,以便在项目中复用。使用封装好的工具类,可以简化加密和解密过程。以下代码展示了完整的加密和解密过程。使用生成的密钥对数据进行加密。

聚娃科技开发者博客 1693

MacBook M芯片第二篇:Homebrew安装

Homebrew是MacOS/Linux平台的软件包管理工具,提供便捷的安装、卸载、更新等功能。

码农魏轩 893

Java中的数据加密与解密策略

在现代应用程序中,数据的安全性是至关重要的,尤其是在传输和存储敏感信息时,使用加密技术可以有效地保护数据的机密性和完整性。数据加密和解密是保障数据安全的重要手段。在Java中,我们可以使用对称加密、非对称加密和哈希算法来保护数据的机密性和完整性。通过结合使用这些技术,可以有效地防止数据在传输和存储过程中的泄漏和篡改。在实际应用中,根据不同的需求选择合适的加密策略,并遵循安全编码的最佳实践,能够显著提升系统的安全性。加密网络通信可以保护数据在传输过程中的安全,常用的协议有HTTPS、SSL/TLS等。

微赚淘客系统开发者博客 680

高通平台Android 无线 UWB 开发全解析:UWB系统设计、天线与校准全流程指南

为使 UWB 系统达到目标性能,在整个开发流程中遵循一套设计最佳实践至关重要。系统架构:需基于飞行时间(ToF)功能的基准方案(POR)定义系统框图,这是整体系统架构的基础。天线布局:天线位置对性能影响极大,需尽可能贴近 UWB 芯片,以减少信号损耗、保持高传输效率。器件选型:需谨慎选择元器件,推荐使用单刀双掷(SPDT)或双刀双掷(DPDT)开关、UWB 带通滤波器射频同轴测试接头,以保障信号传输路径与测试能力。原理图优化:原理图开发阶段,走线损耗优化极为关键。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 171

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

如何在鸿蒙中进行数据加密与解密?

数据加密技术在现代应用中扮演着至关重要的角色,尤其是在数据隐私保护、金融支付、医疗健康等领域。随着网络安全问题的日益严峻,越来越多的应用开始采纳加密技术来保障用户数据的安全。在鸿蒙系统中,开发者可以通过集成 AES、RSA 等加密算法来对数据进行保护。通过合理使用这些加密技术,并结合网络传输的加密协议(如 HTTPS、TLS),可以确保数据在传输过程中的安全性。

小白酷爱学编程,欢迎大家一块儿学习~~ 1422

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Java中的单点登录实现:OAuth2与JWT
下一篇: 使用JUnit 5进行Java单元测试的高级技术
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值