解密

Java:byte[]->Base64 String-> byte[]

和自甴很熟 提交于 2021-01-05 02:41:01
在加解密程序中,为了使加解密传递的参数使用 String 。就必须将 byte[]( 加密 )->String( 中间传递 )-> byte[]( 解密 ) 。 用传统的: retData = new String(myEncryptedData,); byte [] myData = retData .getBytes(charset); 将出现乱码: String 的 getBytes() 方法是得到一个字串的字节数组,这是众所周知的。但特别要注意的是,本方法将返回该操作系统默认的编码格式的字节数 组。如果你在使用这个方法时不考虑到这一点,你会发现在一个平台上运行良好的系统,放到另外一台机器后会产生意想不到的问题。 所以转化为 String 时,用 Base64 编码。 String str = "2b421331c747d1ec54fa5df39f0a3372" ; // 待加密数据 // 2.1 >>> 调用加密方法 byte [] encryptedData = encrypt(rawKeyData, str); //加密转换 BASE64Encoder enc = new BASE64Encoder(); //加密运算之后 将byte[]转化为base64的String String encryptedtext = enc.encode(encryptedData);

java+加密解密

你说的曾经没有我的故事 提交于 2021-01-04 03:35:18
EncrypAES public class EncrypAES { // KeyGenerator 提供对称密钥生成器的功能,支持各种算法 private KeyGenerator keygen; // SecretKey 负责保存对称密钥 private SecretKey deskey; // Cipher负责完成加密或解密工作 private Cipher c; // 该字节数组负责保存加密的结果 private byte[] cipherByte; public EncrypAES() throws NoSuchAlgorithmException, NoSuchPaddingException { Security.addProvider(new com.sun.crypto.provider.SunJCE()); // 实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常) keygen = KeyGenerator.getInstance("DES");// // 生成密钥 deskey = keygen.generateKey(); // 生成Cipher对象,指定其支持的DES算法 c = Cipher.getInstance("DES"); } /** * 对字符串加密 */ public byte[] Encrytor(String str)

Crypto++应用:非对称加密RSA

∥☆過路亽.° 提交于 2020-04-12 17:59:43
1,非对称加密RSA: (1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。 (2)甲方获取乙方的公钥,然后用它对信息加密。 (3)乙方得到加密后的信息,用私钥解密。 2,使用CryptoPP实现RSA: CryptoPP是一套非常完整的加密解密开源解决方案,如何使用这里就不多说了,请自行Google。 #include "..\cryptopp562\randpool.h" #include "..\cryptopp562\osrng.h" #include "..\cryptopp562\rsa.h" //待加密的字符串 string message = "http://my.oschina.net/xlplbo/blog"; printf("message = %s, length = %d\n", message.c_str(), strlen(message.c_str())); /* //自动生成随机数据 byte seed[600] = ""; AutoSeededRandomPool rnd; rnd.GenerateBlock(seed, sizeof(seed)); printf("seed = %s\n", (char *)seed, strlen((char *)seed)); /

OpenSSL 之 RSA 相关命令学习笔记

笑着哭i 提交于 2020-02-29 09:40:25
作者: Angus.Fenying < i.am.x.fenying@gmail.com > 日期: 2016-11-10 10:35 PM 本文介绍 OpenSSL 命令行进行 RSA 加密、解密、签名、验证的操作,但不涉及 RSA 算法原理解析,如有兴趣,可以阅读阮一峰的《RSA算法原理》。如果你只想知道 RSA 是什么,那么你只要记住: RSA 是一种加密算法,使用两个密钥,一个叫公钥,一个 叫私钥,使用公钥加密的密文只有使用私钥才可以解密,反之亦然。 Section 0: 生成随机文件 由于 OpenSSL 创建密钥文件是随机生成的,因此有必要为之提供一份随机数据源。 可以用 openssl 的 rand 命令创建一个 64MB 的随机文件,保存为文件 randSrc.bin 。 openssl rand -out ./randSrc.bin 67108864 还可以使用 -base64 或者 -hex 两个参数之一指定输出格式为 BASE64 或者 HEX。 Section 1: 生成一个密钥文件 小贴士: 根据目前的普遍需求,应当使用 AES256 为加密标准。 通常 RSA 私钥文件命名为 name.pem ,公钥文件名为 name_pub.pem 。 OpenSSL 生成的密钥文件默认是 PEM 格式的。 openssl genrsa \ -rand randSrc

js加解密

人走茶凉 提交于 2020-01-10 03:31:56
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> <html xmlns=" http://www.w3.org/1999/xhtml "> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>字符串加密</title> </head> <body> <script language="JavaScript"> <!-- Begin function encrypt(str, pwd) { if (pwd == null || pwd.length <= 0) { alert("Please enter a password with which to encrypt the message."); return null; } var prand = ""; for (var i = 0; i < pwd.length; i++) { prand += pwd.charCodeAt(i).toString(); } var sPos = Math.floor(prand

js加解密

时间秒杀一切 提交于 2020-01-04 03:28:23
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> <html xmlns=" http://www.w3.org/1999/xhtml "> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>字符串加密</title> </head> <body> <script language="JavaScript"> <!-- Begin function encrypt(str, pwd) { if (pwd == null || pwd.length <= 0) { alert("Please enter a password with which to encrypt the message."); return null; } var prand = ""; for (var i = 0; i < pwd.length; i++) { prand += pwd.charCodeAt(i).toString(); } var sPos = Math.floor(prand

C# 一个简易的加密、解密字符串工具类

荒凉一梦 提交于 2019-12-25 22:06:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文实现的类CypherHelper是一个用于加密、解密字符串的工具类~~~,适合于方便地加密、解密长度较短的密码等字符串(C#里面已经有了库System.Security.Cryptography,对于比较长的字符串或流来说是一个更好的选择) 类CypherHelper代码: class CypherHelper { /// <summary> /// 加密字符串 /// </summary> /// <param name="word">被加密字符串</param> /// <param name="key">密钥</param> /// <returns>加密后字符串</returns> public static string Encrypt(string word, string key) { if (!System.Text.RegularExpressions.Regex.IsMatch(key, "^[a-zA-Z]*$")) { throw new Exception("key 必须由字母组成"); } key = key.ToLower(); //逐个字符加密字符串 char[] s = word.ToCharArray(); for (int i = 0; i < s.Length; i+

PHP mcrypt启用、加密以及解密过程详解

流过昼夜 提交于 2019-12-07 21:42:37
Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。 1.安装PHP加密扩展Mcrypt 要使用该扩展,必须首先安装mcrypt标准类库,注意的是mcrypt软件依赖libmcrypt和mhash两个库。 2.PHP加密扩展库Mcrypt的算法和加密模式 Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示,结果如下: Mcrypt支持的算法有:cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes Mcrypt支持的加密模式有:cbc cfb ctr ecb ncfb nofb ofb stream 这些算法和模式在应用中要以常量来表示,写的时候加上前缀MCRYPT_和MCRYPT_MODE_来表示,如下面Mcrypt应用的例子: DES算法表示为MCRYPT_DES; ECB模式表示为MCRYPT_MODE_ECB; 3.PHP加密扩展库Mcrypt应用 先看一个例子

基于Nodejs的微信消息加密与解密实现概要

老子叫甜甜 提交于 2019-12-06 21:21:22
微信团队提供了 多种语言的示例代码 ,但不包含Nodejs实现版本。经过大量查证和尝试,我已完成并测试通过,下面说说实现要点。 准备 Nodejs为 0.12.1 版或 0.12.2 版,当前最新稳定版。 平台支持Windows和Linux。 基于Python版本改写,通过Python的加解密验证及实际部署验证。 关键点 密匙 key 应当通过 Buffer 转换为binary字符串。 通过 String.fromCharCode 获得补位所用的字符,通过 charCodeAt 判断需要删除的补位字符长度。 设置明文长度时,应通过 Buf.writeUInt32BE 写入,并转换为binary字符串;读取时,使用 Buf.readUInt32BE 。 加密时,XML原文需通过 Buffer 转换为binary字符串。 加密使用 crypto.createCipheriv ,解密使用 crypto.Decipheriv ;须设置 cipher.setAutoPadding(auto_padding=false) ,否则不能正确加解密。 加密时,输入编码为 binary ,输出编码为 base64 。 解密时,输入编码为 base64 ,输出编码为 utf8 。 每个中文字符通过Buffer转换后,实际计算长度为3,因此最后分离 from_appid 时,需便宜行事:P 密匙 key

KMS密钥管理服务(Hadoop)

烈酒焚心 提交于 2019-12-06 21:12:46
##前言 KMS 是Hadoop下的一个密钥管理服务,它实际是与Hadoop结合,提供HDFS文件做AES加密用的。所以它是用来存储AES秘钥的,AES提供三种位数的秘钥,分别是 128 , 192 , 256 ,所以KMS只能存储这三种位数的 byte 数组。 如果你是为了给HDFS文件加密,那么直接通过配置就可以完成,它与Hadoop能够完美契合,由Hadoop调用自动产生秘钥并管理秘钥。但是HDFS文件加密粒度太粗,我们的数据并非要全部加密,而当前针对Hive表列的加密并没有集成方案,官方提供了AES的encrypt函数,但是秘钥key还需明文传入。这样对集群来说其实很不安全。 如果我们自己实现加密UDF,然后借用KMS来做密钥管理,在KMS上加上Kerberos认证,秘钥的处理就可以都封装在UDF内部,不对外暴露,而且可以实现身份认证。 KMS本身提供了一系列API来创建,获取和维护密钥,官网介绍中主要以 RESTFUL 的形式提供,但如果集群上了Kerberos,请求的认证在RESTFULL里就不好做(具体没操作过)。在Hadoop源码里,提供了 KMSClientProvider 用于Hadoop的加密,所以我们可以利用这个接口来获取KMS服务,实现创建管理密钥。 ##配置 KMS是一个Web服务,只需要在一台机器上配置即可,其主要配置文件是 kms-site.xml