首页 > 其他分享 >SM4加密

SM4加密

时间:2023-05-12 15:31:45浏览次数:31  
标签:加密 String SM4 iv length import new byte

SM4加密方法,可以通过传递需要加密的明文和密钥来进行调用:

import org.bouncycastle.crypto.engines.SM4Engine; import org.bouncycastle.crypto.modes.CBCBlockCipher; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithIV; import org.bouncycastle.util.encoders.Hex;

import java.nio.charset.StandardCharsets; import java.security.SecureRandom;

public class SM4Encryption {

// 加密方法
public static String encrypt(String plaintext, String key) {
    byte[] iv = new byte[16];
    new SecureRandom().nextBytes(iv);

    byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
    byte[] plaintextBytes = plaintext.getBytes(StandardCharsets.UTF_8);

    CBCBlockCipher cbcBlockCipher = new CBCBlockCipher(new SM4Engine());
    ParametersWithIV parameters = new ParametersWithIV(new KeyParameter(keyBytes), iv);

    cbcBlockCipher.init(true, parameters);

    byte[] ciphertextBytes = new byte[cbcBlockCipher.getOutputSize(plaintextBytes.length)];
    int outputLength = cbcBlockCipher.processBytes(plaintextBytes, 0, plaintextBytes.length, ciphertextBytes, 0);
    try {
        cbcBlockCipher.doFinal(ciphertextBytes, outputLength);
    } catch (Exception e) {
        e.printStackTrace();
    }

    byte[] ivAndCiphertextBytes = new byte[iv.length + ciphertextBytes.length];
    System.arraycopy(iv, 0, ivAndCiphertextBytes, 0, iv.length);
    System.arraycopy(ciphertextBytes, 0, ivAndCiphertextBytes, iv.length, ciphertextBytes.length);

    return Hex.toHexString(ivAndCiphertextBytes);
}

// 调用示例
public static void main(String[] args) {
    String plaintext = "Hello, world!";
    String key = "0123456789abcdef0123456789abcdef";

    String ciphertext = encrypt(plaintext, key);

    System.out.println("Plaintext: " + plaintext);
    System.out.println("Ciphertext: " + ciphertext);
}

} 在这个示例中,我们使用了Bouncy Castle加密库来实现SM4加密。该方法使用了CBC模式,并使用随机生成的IV来增强安全性。我们将IV和密文组合成一个字节数组,并将其转换为十六进制字符串以便于输出和传输。

要使用此方法,请将上面的代码复制到Java文件中,然后在需要调用的地方使用encrypt()方法,并提供要加密的明文和密钥。例如,在main()方法中,我们将Hello, world!作为明文,将0123456789abcdef0123456789abcdef作为密钥,并打印出加密后的密文。

标签:加密,String,SM4,iv,length,import,new,byte
From: https://blog.51cto.com/u_16103681/6271237

相关文章

  • stm32 AES256加密 串口IAP升级 bootloader程序 通过上位机将keil生成的
    stm32AES256加密串口IAP升级bootloader程序通过上位机将keil生成的BIN文件进行AES加密,得到新的加密文件,加密需要自己设置秘钥,加密升级包直接烧录不能运行。通过串口升级上位机将加密包发送到单片机,单片机接收到数据后,会根据你事先设置好的秘钥,对数据进行还原,再写入。解密完成,程......
  • FPGA IP 源码解密 Vivado加密的IP文件解密复原为Verilog或者VHDL源码 Mo
    FPGAIP源码解密Vivado加密的IP文件解密复原为Verilog或者VHDL源码Modelsim可以编译仿真的vp加密文件均可以解密复原为Verilog或者VHDL源码符合P1735格式保护的代码基本都可以解密还原源代码ID:39188688193060201......
  • 【爬虫】记一次某视频网站的加密解密
    1、起因  由于女友想看某网站付money视频,咱又不想充money,所以咱去网络上找在线解析的那种网站,下载下来,让其不用卡顿,不用手动复制黏贴,畅快的看视频 2、首先我们抓取电视剧的所有剧集链接https://so.iqiyi.com/so/ 反正输入视频链接搜索就完了,然后拿到页面的url 然后......
  • java笔记_10_文件压缩Zip并加密(Zip4j)
    1、添加依赖Maven仓库地址:https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j<!--压缩--><dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId>......
  • AMD MPSoC R5 AES加密示例
    AMDMPSoCR5AES示例目录AMDMPSoCR5AES示例测试环境测试单板测试工具R5AES测试流程创建Platform使能AES库导入AES示例定制AES密钥内存地址创建密文运行AES测试环境测试单板ZCU06测试工具Vitis2021.2R5AES测试流程创建Platform在Vitis的“File-New”中,......
  • 添加密码认证
    在Nginx中启用密码验证需要使用HTTPBasicAuthentication模块。以下是一些步骤:创建密码文件使用htpasswd工具创建密码文件,该工具一般已经安装在Linux系统中,如果没有安装,则需手动安装。例如,要创建密码文件“/etc/nginx/.htpasswd”,可以使用以下命令:sudohtpasswd-c/etc/n......
  • JS逆向 -- 某平台登录算法分析(RSA加密)
    一、输入账号密码,进行抓包二、F12打开开发者工具,抓包分析,password被加密了三、全局搜索password关键字,挨个分析,在箭头标记处找到了关键代码四、局部搜索,定位加密的关键点,通过JSEncrypt,setPublicKey等关键字分析是RSA加密五、代码编写1、调用RSA加密的基本代码编写functionaiyou(pw......
  • 加密市场已处新一轮牛市初期!比特币能否再创历史新高?
       比特币价格继续在27800美元至30000美元的交易区间内盘整。尽管买方目前似乎失去了动力并且空头感觉处于控制之中,但仍有许多理由证明,比特币价格或将在短期和中期创下年度新高。    过去几周表明,BTC对银行业动荡反应强烈并出现上涨。再次证明,比特币的诞生正是为了使资产摆......
  • 非对称密钥的,签名和验签,可否理解为另一种加密和解密???
    背景突然有人这么一给我干蒙了!非对称首先想到的是RSADSARSA也是我们比较熟悉的对称算法也用的比较多私钥公钥比如gitlabsshopenssh、生成秘钥、rsa秘钥DSA用的少也是非对称的签名算法也要用到公钥红河私钥另外一个不常用的非对称算法ECC基于椭圆曲......
  • 常见的js加密方式
      RSA、16进制、Base64都属于可逆加密方式,可以通过相应的解密方法将密文还原为明文。  而哈希算法是不可逆加密方式,只能将明文进行哈希后得到一段固定长度的密文,但无法通过密文还原出明文。其中,SHA算法、MD5算法都是常用的哈希算法。一、16进制加密  加密和解密示例:de......