Token 常用的加解密算法

这篇具有很好参考价值的文章主要介绍了Token 常用的加解密算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常用的 Token 加密算法包括对称加密算法和非对称加密算法。对称加密算法使用相同的密钥来进行加密和解密,加密速度快,但是密钥传输和管理较为复杂。非对称加密算法使用一对公钥和私钥来进行加密和解密,加密速度慢,但是密钥传输和管理较为简单,且具有更好的安全性。

下面分别介绍常用的对称加密算法和非对称加密算法,并提供相应的 Java 代码示例。

Token 常用的加解密算法

对称加密算法

AES

AES(Advanced Encryption Standard)是一种高级加密标准,是一种对称加密算法。AES 可以使用不同的密钥长度,包括 128 位、192 位和 256 位。AES 加密速度较快,安全性较高,已得到广泛应用。下面是使用 AES 进行加密和解密的 Java 代码示例:

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

public class AESUtils {

    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";
    private static final String ALGORITHM = "AES";

    public static String encrypt(String plainText, String key) throws Exception {
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String cipherText, String key) throws Exception {
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        byte[] cipherBytes = Base64.getDecoder().decode(cipherText);
        byte[] decryptedBytes = cipher.doFinal(cipherBytes);
        return new String(decryptedBytes);
    }
}

在上面的示例代码中,encrypt 方法使用 AES 算法对明文进行加密,decrypt 方法使用 AES 算法对密文进行解密。其中,TRANSFORMATIONALGORITHM 分别指定了加密算法和算法模式。在加密和解密的过程中,需要使用相同的密钥来进行加密和解密。

DES

DES(Data Encryption Standard)是一种经典的对称加密算法,使用 56 位密钥进行加密和解密。由于密钥长度较短,安全性较低,已逐渐被其它对称加密算法所取代。下面是使用 DES 进行加密和解密的 Java 代码示例:

import javax.crypto.Cipher;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class DESUtils {

    private static final String TRANSFORMATION = "DES/CBC/PKCS5Padding";
    private static final String ALGORITHM = "DES";
    private static final String IV = "12345678";

    public static String encrypt(String plainText, String key) throws Exception {
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
        SecretKeySpec secretKeySpec = new SecretKeySpec(desKeySpec.getKey(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String cipherText, String key) throws Exception {
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
        SecretKeySpec secretKeySpec = new SecretKeySpec(desKeySpec.getKey(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
        byte[] cipherBytes = Base64.getDecoder().decode(cipherText);
        byte[] decryptedBytes = cipher.doFinal(cipherBytes);
        return new String(decryptedBytes);
    }
}

在上面的示例代码中,encrypt 方法使用 DES 算法对明文进行加密,decrypt 方法使用 DES 算法对密文进行解密。其中,TRANSFORMATIONALGORITHM 分别指定了加密算法和算法模式,IV 则指定了加密算法的初始向量。在加密和解密的过程中,需要使用相同的密钥来进行加密和解密。

非对称加密算法

RSA

RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,使用公钥加密,私钥解密。RSA 的安全性基于质因数分解问题,即将一个大的合数分解成其质数因子的问题。RSA 需要生成一对公钥和私钥,其中公钥可以公开,私钥需要保密。下面是使用 RSA 进行加密和解密的 Java 代码示例:

import java.nio.charset.StandardCharsets;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import javax.crypto.Cipher;

public class RSAUtils {

    private static final String ALGORITHM = "RSA";

    public static KeyPair generateKeyPair(int keySize) throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
        keyPairGenerator.initialize(keySize);
        return keyPairGenerator.generateKeyPair();
    }

    public static String encrypt(String plainText, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(StringcipherText, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] cipherBytes = Base64.getDecoder().decode(cipherText);
        byte[] decryptedBytes = cipher.doFinal(cipherBytes);
        return new String(decryptedBytes, StandardCharsets.UTF_8);
    }

    public static PublicKey getPublicKey(byte[] keyBytes) throws Exception {
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        return KeyFactory.getInstance(ALGORITHM).generatePublic(keySpec);
    }

    public static PrivateKey getPrivateKey(byte[] keyBytes) throws Exception {
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
        return KeyFactory.getInstance(ALGORITHM).generatePrivate(keySpec);
    }
}

在上面的示例代码中,generateKeyPair 方法用于生成一对公钥和私钥,encrypt 方法使用公钥对明文进行加密,decrypt 方法使用私钥对密文进行解密。在加密和解密的过程中,需要使用相同的公钥和私钥。在获取公钥和私钥的过程中,需要指定相应的密钥格式。

ECC

ECC(Elliptic Curve Cryptography)是一种基于椭圆曲线数学问题的非对称加密算法。ECC 相对于 RSA 等传统的非对称加密算法来说,具有更高的加密强度和更短的密钥长度,因此在一些资源受限或对安全性要求较高的场景中得到了广泛应用。下面是使用 ECC 进行加密和解密的 Java 代码示例:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.util.Base64;

public class ECCUtils {

    private static final String ALGORITHM = "EC";
    private static final String SIGNATURE_ALGORITHM = "SHA256withECDSA";

    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
        return keyPairGenerator.generateKeyPair();
    }

    public static String sign(String plainText, PrivateKey privateKey) throws Exception {
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
        signature.initSign(privateKey);
        signature.update(plainText.getBytes());
        byte[] signedBytes = signature.sign();
        return Base64.getEncoder().encodeToString(signedBytes);
	}
	
	public static boolean verify(String plainText, String signatureText, PublicKey publicKey) throws Exception {
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
        signature.initVerify(publicKey);
        signature.update(plainText.getBytes());
        byte[] signatureBytes = Base64.getDecoder().decode(signatureText);
        return signature.verify(signatureBytes);
	}
}

在上面的示例代码中,generateKeyPair 方法用于生成一对公钥和私钥,sign 方法使用私钥对明文进行签名,verify 方法使用公钥对签名进行验证。在签名和验证的过程中,需要使用相同的公钥和私钥。

小结

以上是常用的 Token 加密算法的 Java 代码示例,包括对称加密算法 AES 和 DES,以及非对称加密算法 RSA 和 ECC。在实际使用中,需要根据具体的场景和需求选择合适的加密算法,并进行适当的参数配置和密钥管理,以保障数据的安全性和可靠性。文章来源地址https://www.toymoban.com/news/detail-451291.html


到了这里,关于Token 常用的加解密算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解密Web安全:Session、Cookie和Token的不解之谜

    在当今数字化世界中,我们随处都会遇到用户身份验证和数据保护的挑战。无论是网上购物、社交媒体还是在线银行,我们的身份和隐私信息需要得到妥善的保护。本文将引导你探索三个核心概念:Session、Cookie和Token,它们是构建现代Web应用的不可或缺的组成部分。我们将解

    2024年02月06日
    浏览(46)
  • 小程序、pc、h5端token的jwt解密解码(base64)

    前言:很多时候我们需要对数据进行加密解密,比如解析token等  这个时候我们就需要对其进行数据操作 ,而不同平台的加密解密方法也是不一样的,这里我做一下记录。 我们先来了解一下 jwt 全称是JSON WEB TOKEN  JWT是用于用户与服务器之间身份认证的密码。 这个“密码”的

    2024年02月09日
    浏览(44)
  • 快速实现用户认证:使用Python和Flask配合PyJWT生成与解密Token的教程及示例代码

    这段代码提供了一个使用 Python 和 Flask 结合 JWT (JSON Web Tokens) 进行用户认证的简单框架。它包括了生成 token、解码 token、检查用户状态和一个装饰器函数,用于保护需要认证的路由。下面是对代码的逐部分解释: 1. generate_token(user_id) 函数 这个函数用于为指定的用户 ID 生成一

    2024年02月22日
    浏览(52)
  • Java 常用加密解密

    常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。 对称加密 常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES 非对称加密 常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用) Hash算法 常见的H

    2024年01月16日
    浏览(47)
  • ChatGPT最好用的连接-自动写文案-代码算法最佳选择

    根据近些天各种平台ChatGPT试用测试,功能基本都大同小异,主要使用场景是机器对话,文案,代码。 ChatGPT与编程语言的结合可以在局部文案和算法方面提供帮助,但无法完全替代人工处理。具体而言,ChatGPT在以下方面有所帮助: 局部文案生成 :ChatGPT可以根据给定的要求和

    2024年02月01日
    浏览(44)
  • 狗都会用的余弦退火(CosineAnnealingLR)学习率调节算法讲解

    今天刚好有空,来讲讲deep learning中学习率调节的常见技巧:余弦退火算法。 学习率是最影响性能的超参数之一,在我们的大多数的炼丹过程中,遇到 loss 变成 NaN 的情况大多数是由于学习率选择不当引起的(当然也有可能是loss实现过程有问题)。 过大的学习率容易造成los

    2024年01月17日
    浏览(49)
  • 【大全】常用加解密算性能、安全对比

    常用算法 1、古典加密算法 古典密码(classical cryptography)编码方式归根结底主要就是置换和代换. 置换:已知明文字母集S={a,b},置换后的密码可以是S’={b,a},即将明文字符位置发生变化后形成的密码就是置换密码. 代换:已知明文集S1={a,b,c},S2={1,2,3},将S1中的字符代换为S

    2024年04月17日
    浏览(30)
  • Java常用的加密解密工具类

    在软件开发中,数据的安全性是一个重要的考虑因素。为了保护敏感数据,我们经常需要对数据进行加密和解密操作。为了简化加密解密操作,提高开发效率,我们可以使用一个常用的加密解密工具类。本文将介绍一个常用的 Java 加密解密工具类,并提供详细的使用说明和示

    2024年02月02日
    浏览(47)
  • 不同事物价值比较的加减不同于数学上的加减

    在数学中,加法和减法是进行数值运算的基本操作,其结果是具体的数值。而在比较不同事物的价值时,加法和减法的概念都有所不同。 在价值比较中,加法通常用于表示将两个或多个事物的价值相加,得到一个综合的总价值。这种加法并不是简单的数值相加,而是对不同事

    2024年01月19日
    浏览(44)
  • 三个常用查询:根据用户名 / token查询用户信息+链表分页条件查询

    目录 1.根据用户名或者token查询用户信息 会员信息实体类 统一状态Result类  controller层 service层及实现类 dao层 测试: 2.链表分页条件查询 会员等级实体类 封装条件类PageVo  controller层 service层及实现类 dao层 Mapper.xml层 测试 vue前端参考 mybatisplus... 微服务项目前期环境:项目搭

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包