key, iv 自己随意设定

为了让结果可正常打印输入显示,都经过base64处理

* TripleDES.go

package authimport ("bytes""crypto/cipher""crypto/des""encoding/base64"
)type TripleDES struct {key stringiv  string
}// @ref: https://blog.csdn.net/xiaoxiao_haiyan/article/details/81320350
func (this *TripleDES) Encrypt(plain string) (string, error) {key := []byte(this.key)iv := []byte(this.iv)block, err := des.NewTripleDESCipher(key)if err != nil {return "", err}input := []byte(plain)// input = PKCS5Padding(input, block.BlockSize())blockMode := cipher.NewOFB(block, iv)crypted := make([]byte, len(input))blockMode.XORKeyStream(crypted, input)return base64.StdEncoding.EncodeToString(crypted), err
}func (this *TripleDES) Decrypt(secret string) (string, error) {key := []byte(this.key)iv := []byte(this.iv)crypted, err := base64.StdEncoding.DecodeString(secret)if err != nil {return "", err}block, err := des.NewTripleDESCipher(key)if err != nil {return "", err}blockMode := cipher.NewOFB(block, iv)origData := make([]byte, len(crypted))blockMode.XORKeyStream(origData, crypted)// origData = PKCS5UnPadding(origData)return string(origData), nil
}func PKCS5Padding(ciphertext []byte, blockSize int) []byte {padding := blockSize - len(ciphertext)%blockSizepadtext := bytes.Repeat([]byte{byte(padding)}, padding)return append(ciphertext, padtext...)
}func PKCS5UnPadding(origData []byte) []byte {length := len(origData)// 去掉最后一个字节 unpadding 次unpadding := int(origData[length-1])return origData[:(length - unpadding)]
}

* TripleDES_test.go

package authimport ("strings""testing"
)func TestTripleDES_Encrypt(t *testing.T) {input := "11111"key := "\x8a\xbe\x1e\x3f..."iv := "\x8a\xbe\x1e\x3f\xab\xb0\x90\xe8"des := TripleDES{key: key, iv: iv}output, err := des.Encrypt(input)if err != nil {t.Errorf(err.Error())}t.Log(output)if output != "VMtLmys=" {t.Fail()}
}func TestTripleDES_Decrypt(t *testing.T) {input := "FY8OxXQKh4I="key := "\x8a\xbe\x1e\x3f..."iv := "\x8a\xbe\x1e\x3f\xab\xb0\x90\xe8"des := TripleDES{key: key, iv: iv}output, err := des.Decrypt(input)if err != nil {t.Errorf(err.Error())}t.Log(output)if strings.Compare(output, "putongj3") != 0 {t.Fail()}
}

参考文章: golang实现3DES加解密_xiaoxiao_haiyan的博客-CSDN博客_3des golang

Java版本

import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;public class TripleDES {// private final String key = "ZMiKVoJmzlqFRylAg8IV0hjU";// private final String iv = "ZMiKVoJm";private byte[] bytesKey;private byte[] bytesIv;TripleDES(String key, String iv) {this.bytesKey = key.getBytes();this.bytesIv = iv.getBytes();}public String encrypt(String plain) {byte[] result = null;try {SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");DESedeKeySpec desedeKeySpec = new DESedeKeySpec(bytesKey);Key convertSecretKey = factory.generateSecret(desedeKeySpec);//加密Cipher cipher = Cipher.getInstance("DESede/OFB/NoPadding");IvParameterSpec ips = new IvParameterSpec(bytesIv);cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey, ips);result = cipher.doFinal(plain.getBytes());} catch (Exception e) {e.printStackTrace();}return Base64.getEncoder().encodeToString(result);}public String decrypt(String crypted) {byte[] cryptedBytes = Base64.getDecoder().decode(crypted);String result = "";try {SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");DESedeKeySpec desedeKeySpec = new DESedeKeySpec(bytesKey);Key convertSecretKey = factory.generateSecret(desedeKeySpec);Cipher cipher = Cipher.getInstance("DESede/OFB/NoPadding");IvParameterSpec ips = new IvParameterSpec(bytesIv);cipher.init(Cipher.DECRYPT_MODE, convertSecretKey, ips);result = new String(cipher.doFinal(cryptedBytes));} catch (Exception e) {e.printStackTrace();}return result;}private static String hexdump(byte[] ba) {StringBuilder sb = new StringBuilder();for (int i = 0; i < ba.length; i++) {sb.append(String.format("%02x", ba[i]));}return sb.toString();}public static void main(String[] args) {final String key = "ZMiKVoJmzlqFRylAg8IV0hjU";final String iv = "ZMiKVoJm";String plain = "http://www.baidu.com";TripleDES des = new TripleDES(key, iv);String enc = des.encrypt(plain);System.out.println(enc);String plain2 = des.decrypt(enc);System.out.println(plain2);}}

php版本

<?php
// require php7
// php -m | grep opensslfunction password_encrypt($input){if (empty($input)) {return null;}$key = "ZMiKVoJmzlqFRylAg8IV0hjU";$iv = "ZMiKVoJm";// php7$data = openssl_encrypt($input, "DES-EDE3-OFB",$key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $iv);// ---- php5 ----// $td = mcrypt_module_open(MCRYPT_3DES, '', 'nofb', '');// mcrypt_generic_init($td, $key, $iv);// $data = mdecrypt_generic($td, $input);// mcrypt_generic_deinit($td, $key, $iv);// mcrypt_module_close($td);$data = base64_encode($data);return $data;
}function password_decrypt($input) {if (empty($input)) {return null;}$key = "ZMiKVoJmzlqFRylAg8IV0hjU";$iv = "ZMiKVoJm";$input = base64_decode($input);$data = openssl_decrypt($input, "DES-EDE3-OFB",$key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $iv);return $data;
}$input = "http://www.baidu.com";
$output = password_encrypt($input);
echo $output.PHP_EOL;echo password_decrypt($output).PHP_EOL;
/*
$ php triple_des.php
30c7lIQeRAFdn2uXhAlbMWp11Lo=
http://www.baidu.com
*/

用户密码解密

用户密码解密_fareast_mzh的博客-CSDN博客

golang 3DES 加密相关推荐

  1. 怎样操作vue.js使用3DES加密

    如何在VUE-CLI手脚架建立的工程中使用3des加密: 1 npm install crypto-js --save-dev 1 import CryptoJS from 'crypto-js' 1 ...

  2. java之php、Android、JAVA、C# 3DES加密解密

    异常如下 1.javax.crypto.BadPaddingException: Given final block not properly padded 1)要确认下是否加密和解密都是使用相同的填 ...

  3. 3des java ecb_PHP 3DES加密 与JAVA通用 加密模式:ECB

    昨天帮同事解决了一个接口加密的算法,同事是个小姑娘,不懂,所以老大派我协助她,所以我为了不在姑凉面前掉面子~~火速解决它... 甲方是电信,JAVA写的接口,我一听头就大了,大家都知道~~PHP在加密 ...

  4. 探讨.NET Core数据进行3DES加密和解密问题

    前言 一直困扰着我关于数据加密这一块,24号晚上用了接近3个小时去完成一项任务,本以为立马能解决,但是为了保证数据的安全性,我们开始去对数据进行加密,然后接下来3个小时专门去研究加密这一块,然而用着用 ...

  5. 探讨NET Core数据进行3DES加密或解密弱密钥问题

    [导读]之前写过一篇<探讨.NET Core数据进行3DES加密和解密问题>,最近看到有人提出弱密钥问题,换个强密钥不就完了吗,猜测可能是与第三方对接导致很无奈不能更换密钥,所以产生本文解 ...

  6. java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...

    java 中32位秘钥长度的 3des加密方法? java 中 3des加密 默认是24位秘钥的 现在需求是 32位秘钥加密 尝试很多种方法 解决 结果都不正确 // 密钥 private final ...

  7. Des与3Des加密解密

    /// <summary>/// Des和3Des算法/// </summary>public class Des{/// <summary>/// Des加密// ...

  8. java的et5_Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )

    在某个项目中,需要开发一个与native相对应的web前端app,后台用的是java restful接口,请求数据时需要用的3des加密.如果想要请求接口,则需要javascript的加密与java相 ...

  9. java 3des加密_Java使用3DES加密解密的流程 - 3des加密解密详细解释

    Java使用3DES加密解密的流程 ①传入共同约定的密钥(keyBytes)以及算法(Algorithm),来构建SecretKey密钥对象 SecretKey deskey = new Secret ...

最新文章

  1. python装饰器类-python装饰器2:类装饰器
  2. Codeforces Round #280 (Div. 2)
  3. ping和telnet的区别
  4. 【clickhouse】clickhouse配置多块磁盘
  5. Highlighter与BooleanQuery查询
  6. 太牛了,2万字用Python深度探索金庸小说世界!
  7. 怎么写解题步骤——FIRST集、FOLLOW集、LL(1)分析法【编译原理之语法分析】
  8. 计算机硬盘加密的几种方法,对于移动硬盘加密方法 你了解多少种呢?
  9. 怪诞行为学 读书笔记
  10. 如何批量制作结业证书
  11. #include指令引号与尖括号的区别
  12. OctaPhenyl POSS/八苯基POSS (Ph-POSS)/八苯基笼型倍半硅氧烷(OPPOSS)/八苯基官能化POSS/八苯基硅倍半氧烷/八苯基取代的POSS
  13. 关于装有WIN7系统的硬盘转移到USB3.0移动硬盘盒后开机启动蓝屏(代码7B)的解决方案
  14. web前端涉及到的软件
  15. 已设置了参考编号的编码规则定义,但是新增单据的时候,没有出来自动编号是什么原因?...
  16. 正厚知识 | Flash为何消失了?
  17. 【文档】web系统非功能性需求
  18. 微信小程序 nodejs+vue网上购物商城系统
  19. 五年级下册语文电子计算机,语文五年级下册选读课文教案 5.电子计算机与多媒体...
  20. 2019-4-30今天给来学习的学员做了几道试题,提前祝大家劳动节愉快

热门文章

  1. 离散型随机变量和连续型随机变量
  2. 什么是WFS服务,发布WFS服务有什么用
  3. 深圳航空机票查询API
  4. 手推梯度提升树GBDT
  5. 通关率不到0.1%的小游戏《羊了个羊》为什么这么火?
  6. aes-256-cbc php加密js解密
  7. Java乐图下载_Java平台乐图导航地图测评:实时跟踪是亮点
  8. 300英雄服务器维护时间,《300英雄》2021年5月13日【测试服】更新维护公告
  9. 双非学计算机本科毕业,这些双非学校计算机很强,学生超级抢手,没毕业就被预定...
  10. JavaWeb——用户信息列表案例