本文目录一览:
- 1、android,java 通用的加密解密方式有几种
- 2、数据encrypted加密的值怎么解密
- 3、英语encrypted password怎么翻译?
- 4、C语言 文件加密解密
- 5、用accessencrypted 加密的文件怎么破解
- 6、encrypted js 怎么解密
android,java 通用的加密解密方式有几种
移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道。为了让数据交互更安全,我们需要对数据进行加密传输。今天研究了一下,把几种语言的加密都实践了一遍,实现了.NET,java(android),iOS都同一套的加密算法,下面就分享给大家。
AES加密有多种算法模式,下面提供两套模式的可用源码。
加密方式:
先将文本AES加密
返回Base64转码
解密方式:
将数据进行Base64解码
进行AES解密
一、CBC(Cipher Block Chaining,加密块链)模式
是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度.
密钥
密钥偏移量
java/adroid加密AESOperator类:
package com.bci.wx.base.util;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化;
*/
public class AESOperator {
/*
* 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。
*/
private String sKey = "smkldospdosldaaa";//key,可自行修改
private String ivParameter = "0392039203920300";//偏移量,可自行修改
private static AESOperator instance = null;
private AESOperator() {
}
public static AESOperator getInstance() {
if (instance == null)
instance = new AESOperator();
return instance;
}
public static String Encrypt(String encData ,String secretKey,String vector) throws Exception {
if(secretKey == null) {
return null;
}
if(secretKey.length() != 16) {
return null;
}
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = secretKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(vector.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(encData.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);// 此处使用BASE64做转码。
}
// 加密
public String encrypt(String sSrc) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);// 此处使用BASE64做转码。
}
// 解密
public String decrypt(String sSrc) throws Exception {
try {
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
return null;
}
}
public String decrypt(String sSrc,String key,String ivs) throws Exception {
try {
byte[] raw = key.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivs.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
return null;
}
}
public static String encodeBytes(byte[] bytes) {
StringBuffer strBuf = new StringBuffer();
for (int i = 0; i bytes.length; i++) {
strBuf.append((char) (((bytes[i] 4) 0xF) + ((int) 'a')));
strBuf.append((char) (((bytes[i]) 0xF) + ((int) 'a')));
}
return strBuf.toString();
}
数据encrypted加密的值怎么解密
您用什么方法加密的,我建议您用什么方法解密。 给excel2010文件加密,我使用的是超级加密3000. 超级加密 3000采用先进的加密算法,使你的文件和文件夹加密后,真正的达到超高的加密强度,让你的加密数据无懈可击。
英语encrypted password怎么翻译?
意思是加密口令、加密密码、加密后的密码。
encrypted password
音标:英 [ɪnˈkrɪptɪd ˈpɑːswɜːd] 美 [ɪnˈkrɪptɪd ˈpæswɜːrd]
意思:加密口令;加密密码;加密后的密码。
例句:
(1)The remote server cannot use the Windows NT encrypted password.
远程服务器不能使用WIN NT加密密码。
(2)Value received from dial-in user used to verify encrypted password.
从拨入用户收到的用来验证加密密码的数值。
C语言 文件加密解密
根据你的需要,修改了之前的代码。
#include stdio.h
#include string.h
#include stdlib.h
#include time.h
const unsigned int MAX_KEY_LENGTH = 1000;
int encode(char const *datafile, char const *keyfill);
int decode(char const *datafile, char const *keyfile);
int loadKey(char const *keyfile, int *keys, unsigned int size);
int saveKey(char const *keyfile, int *keys, unsigned int size);
int generateKey(int *keys, unsigned int size);
int main(int argc, char const *argv[])
{
char datafile[] = "encrypted.txt";
char keyfile[] = "key.txt";
int retcode, choice, loop = 1;
char ch[5] = {'\0'};
while(1)
{
printf("1. Encryption.\n");
printf("2. Decryption.\n");
printf("3. Exit.\n");
printf("Selection (1,2,3):");
fgets(ch, sizeof(ch), stdin);
sscanf(ch, "%d", choice);
switch(choice)
{
case 1:
retcode = encode(datafile, keyfile);
if (retcode != 0) printf("error, %d\0", retcode);
break;
case 2:
retcode = decode(datafile, keyfile);
if (retcode != 0) printf("error, %d\0", retcode);
break;
case 3:
loop = 0;
break;
default:
;
break;
}
if (0 == loop) break;
}
return 0;
}
int generateKey(int *keys, unsigned int size)
{
char str[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,./;\"'?";
size_t str_len = sizeof(str)/sizeof(str[0]);
int i;
srand(time(NULL));
for (i = 0; i size; ++i)
keys[i] = str[rand() % str_len];
return 0;
}
int loadKey(char const *keyfile, int *keys, unsigned int size)
{
int i = 0;
FILE *pfile;
int retcode = 0;
pfile = fopen(keyfile, "r");
if (pfile == NULL) return -1;
while ( !feof(pfile) ) {
if (i size)
fscanf(pfile, "%d ", keys[i++]);
else
break;
}
fclose(pfile);
return i;
}
int saveKey(char const *keyfile, int *keys, unsigned int size)
{
FILE *pfile;
int i;
pfile = fopen(keyfile, "w");
if (pfile == NULL) return -1;
for(i = 0; i size; ++i) {
fprintf(pfile, "%d ", keys[i]);
}
fclose(pfile);
return 0;
}
int encode(char const *datafile, char const *keyfile)
{
char original[MAX_KEY_LENGTH] = {'\0'};
char encrypted[MAX_KEY_LENGTH] = {'\0'};
int i, size;
int keys[MAX_KEY_LENGTH];
FILE *pdatafile, *pkeyfile;
pkeyfile = fopen(keyfile, "w");
if (NULL == pkeyfile) return -1;
fclose(pkeyfile);
puts(" input message:");
gets(original);
size = strlen(original);
if (0 != generateKey(keys, size)) return -2;
if (0 != saveKey(keyfile, keys, size) ) return -3;
pdatafile = fopen(datafile, "w");
if (NULL == pdatafile) return -4;
for (i = 0; i size; ++i) {
encrypted[i] = original[i] + keys[i];
fputc(encrypted[i], pdatafile);
fputc(encrypted[i], stdout);
}
printf("\n");
fclose(pdatafile);
return 0;
}
int decode(char const *datafile, char const *keyfile)
{
FILE *pdatafile, *pkeyfile;
int keys[MAX_KEY_LENGTH] = {0};
char original[MAX_KEY_LENGTH] = {'\0'};
char encrypted[MAX_KEY_LENGTH] = {'\0'};
int i, size;
pkeyfile = fopen(keyfile, "r");
if (NULL == pkeyfile) return -1;
fclose(pkeyfile);
pdatafile = fopen(datafile, "r");
if (NULL == pdatafile) return -2;
fscanf(pdatafile,"%s",encrypted);
fclose(pdatafile);
size = loadKey(keyfile, keys, MAX_KEY_LENGTH);
if (size 1) return -3;
for (i = 0; i strlen(encrypted); ++i) {
original[i] = encrypted[i]-keys[i];
fputc(original[i], stdout);
}
printf("\n");
return 0;
}
运行结果:
1. Encryption.
2. Decryption.
3. Exit.
Selection (1,2,3):1
input message:
this is A test!
╓┐»╞Lñ╗ù|t▄╬╢╒è
1. Encryption.
2. Decryption.
3. Exit.
Selection (1,2,3):2
this is A test!
1. Encryption.
2. Decryption.
3. Exit.
Selection (1,2,3):3
用accessencrypted 加密的文件怎么破解
我之前使用过一款软件是超级加密3000这款软件,对文档加密就是通过设置的密码把文档转换为密文,解密的时候也是需要通过输入正确的密码,把密文转换为普通的数据,否则的话,是无法访问数据的,即使强制破解打开后也是乱码系统自带的加密方法就更不用说了,目前为止连微软自己都无法解密,所以可以帮你解密的可想而知。。。。用户如果没有专门的密码,是无法获取加密文件的。1.打开网页浏览器,在百度中搜索“access密码破解”,会搜索出很多结果,如图;随便打开其中一个网页,把程序下载下来。2.打开下载的程序(如果下载的程序是个压缩包,请先解压),如图:点击“选择文件”按键,选择一个设置过密码的Access数据库文件,密码立刻就显示了出来,如图:3.为了验证破解出来的密码是否正确,打开刚才的那个Access数据库文件,会弹出“要求输入密码”的对话框,如图:4.把第二步中破解出来的密码复制、粘贴到密码框中,点击“确定”按钮。可以看到,数据库文件被打开了。5.由此可见,Access数据库的安全性很差,不适合在网站中使用,应该使用MSSQL、MySQL、Oracle等数据库替代。
encrypted js 怎么解密
function decrypt(str, pwd) {
if (str == null || str.length 8) {
alert("A salt value could not be extracted from the encrypted message because it's length is too short. The message cannot be decrypted.");
return;
}
if (pwd == null || pwd.length = 0) {
alert("Please enter a password with which to decrypt the message.");
return;
}
var prand = "";
for (var i = 0; i pwd.length; i++) {
prand += pwd.charCodeAt(i).toString();
}
var sPos = Math.floor(prand.length / 5);
var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));
var incr = Math.round(pwd.length / 2);
var modu = Math.pow(2, 31) - 1;
var salt = parseInt(str.substring(str.length - 8, str.length), 16);
str = str.substring(0, str.length - 8);
prand += salt;
while (prand.length 10) {
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
}
prand = (mult * prand + incr) % modu;
var enc_chr = "";
var enc_str = "";
for (var i = 0; i str.length; i += 2) {
enc_chr = parseInt(parseInt(str.substring(i, i + 2), 16) ^ Math.floor((prand / modu) * 255));
enc_str += String.fromCharCode(enc_chr);
prand = (mult * prand + incr) % modu;
}
return enc_str;
}