如何使用公钥加密字符串并使用私钥解密?

2023-11-25

我想用服务器上的密钥加密密码并在服务器端解密加密的密码。这是我在我的应用程序中使用的代码

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package publicprivatekey;

import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import javax.crypto.*;

/**
 *
 * @author Rajorshi
 */
public class PublicPrivateKey {

    public static String getEncrypted(String data, String Key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(Key.getBytes())));
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedbytes = cipher.doFinal(data.getBytes());
        return new String(Base64.getEncoder().encode(encryptedbytes));
    }

    public static String getDecrypted(String data, String Key) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        PrivateKey pk = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(Key.getBytes())));
        cipher.init(Cipher.DECRYPT_MODE, pk);
        byte[] encryptedbytes = cipher.doFinal(Base64.getDecoder().decode(data.getBytes()));
        return new String(encryptedbytes);
    }

    public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
        // TODO code application logic here
        KeyGenerator keyGenerator = KeyGenerator.getInstance("Blowfish");
        keyGenerator.init(448);
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.genKeyPair();

        String pubKey = new String(Base64.getEncoder().encode(keyPair.getPublic().getEncoded()));
        String priKey = new String(Base64.getEncoder().encode(keyPair.getPrivate().getEncoded()));
        System.out.println("Public Key:" + pubKey);
        System.out.println("Private Key:" + priKey);
        String cipherText = getEncrypted("hi this is a string", pubKey);

        System.out.println("CHIPHER:" + cipherText);
        String decryptedText = getDecrypted(cipherText, priKey);
        System.out.println("DECRYPTED STRING:" + decryptedText);

    }

}

我想用服务器上的密钥加密密码并在服务器端解密加密的密码。这是我在我的应用程序中使用的代码。


如果您正在寻找一个java程序来使用公钥加密数据并使用私钥解密数据,那么这里是代码(使用RSA算法),

import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

/**
 * @author visruthcv
 *
 */
public class CryptographyUtil {

    private static final String ALGORITHM = "RSA";

    public static byte[] encrypt(byte[] publicKey, byte[] inputData)
            throws Exception {

        PublicKey key = KeyFactory.getInstance(ALGORITHM)
                .generatePublic(new X509EncodedKeySpec(publicKey));

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, key);

        byte[] encryptedBytes = cipher.doFinal(inputData);

        return encryptedBytes;
    }

    public static byte[] decrypt(byte[] privateKey, byte[] inputData)
            throws Exception {

        PrivateKey key = KeyFactory.getInstance(ALGORITHM)
                .generatePrivate(new PKCS8EncodedKeySpec(privateKey));

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, key);

        byte[] decryptedBytes = cipher.doFinal(inputData);

        return decryptedBytes;
    }

    public static KeyPair generateKeyPair()
            throws NoSuchAlgorithmException, NoSuchProviderException {

        KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);

        SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");

        // 512 is keysize
        keyGen.initialize(512, random);

        KeyPair generateKeyPair = keyGen.generateKeyPair();
        return generateKeyPair;
    }

    public static void main(String[] args) throws Exception {

        KeyPair generateKeyPair = generateKeyPair();

        byte[] publicKey = generateKeyPair.getPublic().getEncoded();
        byte[] privateKey = generateKeyPair.getPrivate().getEncoded();

        byte[] encryptedData = encrypt(publicKey,
                "hi this is Visruth here".getBytes());

        byte[] decryptedData = decrypt(privateKey, encryptedData);

        System.out.println(new String(decryptedData));

    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用公钥加密字符串并使用私钥解密? 的相关文章

随机推荐

  • 如何使用 setuptools 打包 Python 守护进程

    如何使用 setuptools 打包 Python 应用程序 以便在安装时 例如通过 setup py 或 pip 将守护程序脚本放置在适当的位置 启动它 并将其标记为在启动时自动启动 就我而言 我的代码仅适用于 Linux 因此我只关心在
  • 无法打开 Hibernate 会话以进行事务、JavaConfig

    找不到错误 Spring MVC Hibernate JavaConfig 网络应用程序配置 package com sprhib init import java util Properties import javax annotati
  • 春天@RequestMapping

    我不断看到这种参数value redirect id in a RequestMappingSpring 的注释 我一直想知道什么是 id 这里 这是某种Expression Language 我所看到的示例代码 RequestMappin
  • 每页打印一次背景图像

    我需要每页打印一次背景图像当我打印大的 html 文件时 现在它只打印在第一页上 所以 css 的部分是 media all body text align left background image url C logo png back
  • 画布中的真实鼠标位置

    我正在尝试用鼠标在 HTML5 画布上进行绘制 但似乎效果良好的唯一方法是 如果我出于某种原因更改画布位置 则画布位于位置 0 0 左上角 它没有像它应该的那样绘制 这是我的代码 function createImageOnCanvas i
  • 用于查找使用过多 CPU 的进程的命令[关闭]

    Closed 这个问题是无关 目前不接受答案 我可以使用什么命令来查找使用大量 CPU 的进程 我可以在不安装新东西的情况下执行此操作吗 或者使用您可以执行的其他一些实用程序 ps aux sort rk 3 3 head n 5 更改 h
  • 在 SQL Server 2005 中如何将多行组合成逗号分隔的列表?

    现在 我有一个像这样的 SQL 查询 SELECT X Y FROM POINTS 它返回的结果如下 X Y 12 3 15 2 18 12 20 29 我想在一行中返回所有结果 如下所示 适合在 HTML 标记中使用 XYLIST 12
  • Angularjs - 如何清除 $routeProvider 的 templateUrl 缓存

    我的应用程序中有非常基本的用例 其中我使用 AngularJS 1 0 8 作为前端 使用 Grails 作为后端 在应用程序布局中 我有一个语言切换器 允许用户更改语言 切换语言后 它会执行新的 http 请求来检索页面 Grails 会
  • Django - 模板显示模型 verbose_names 和对象

    我需要在模板中显示多个模型名称和对象 这是我的view def contents request Lists contents objects Model1 objects all Model2 objects all Model3 obj
  • PHP 函数重命名权限被拒绝

    在服务器中 脚本创建新文件夹 将 chmod 设置为 0777 但随后它尝试将文件移动到该文件夹 但出现错误 权限被拒绝 mkdir new 1 0777 chmod new 1 0777 mkdir new 1 new 2 0777 ch
  • 如何在 JavaScript 中获取两个日期之间的差异?

    我正在创建一个应用程序 它可以让您定义带有时间范围的事件 我想在用户选择或更改开始日期时自动填写结束日期 但是 我不太清楚如何获得两个时间之间的差异 以及如何使用该差异创建新的结束日期 在 JavaScript 中 可以通过调用将日期转换为
  • Font Awesome 未出现在 Internet Explorer 8 中

    我们最近开发了一个网站 其设计强烈依赖 Font Awesome 我们使用 before content 及其提供的 CSS 的标准实现 由于某些原因 Font Awesome 未在 IE8 中显示 我花了相当多的时间进行故障排除并尝试各种
  • jQuery:如何在元素显示时调用函数

    我想在 div 显示时 显示后 调用一个函数 有谁知道我该怎么做 我尝试使用类似的东西 someDiv bind show function alert example 但我不确定我是否以正确的方式做到这一点 或者是否可能实现这一点 有任何
  • Java 可以在运行时创建变量吗?

    例如 假设我想 提取 String fruits Pear Banana Apple 分成三个独立的变量 例如 for int i 0 i fruits length i of course there s no eval in Java
  • 如何在 Java 中表示一个范围?

    假设一个整数应该在以下范围内 0 2147483647 我想检查整数变量是否落在这个范围内 我知道它可以通过一个简单的 if else 语句来完成 但是有没有更有效的方法来检查它是否在范围内 我宁愿不这样做 if foo gt 0 foo
  • 用于正确对齐列的 Shell 脚本

    我有一个 3 列 制表符分隔的文件 例如 activity log manager Manager reserve rm hreserver rm log manager Manager mo apprv mgr1 Approving Ma
  • keras.load_model() 无法识别 Tensorflow 的激活函数

    我使用保存了 tf keras 模型tf keras save model功能 为什么tf keras load model抛出异常 代码示例 import tensorflow as tf from tensorflow import k
  • 页面上存在一个或多个错误

    收到 页面上存在一个或多个错误 但无法找到确切的错误 这是截图 Edit 1 我正在尝试上传尺寸为 1536 x 2048 像素的 iPad 屏幕截图 以获取最大高分辨率肖像 全屏 并锁定 但出现奇怪的错误 如下所示 注意 我尝试从 chr
  • 从 HTML
    到 Microsoft Word

    我有一个 HTMLfigure img and figcaption标签 我想将它们转换为 Microsoft Word 文档 所引用的图像img应该插入到Word文档中 并且figcaption应转换为其标题 也保留图号 我尝试用 Wor
  • 如何使用公钥加密字符串并使用私钥解密?

    我想用服务器上的密钥加密密码并在服务器端解密加密的密码 这是我在我的应用程序中使用的代码 To change this license header choose License Headers in Project Properties