「java可逆算法」java判断可逆素数

博主:adminadmin 2023-03-18 07:11:06 492

今天给各位分享java可逆算法的知识,其中也会对java判断可逆素数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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();

}

java中,用不定长字符串生成定长字符串,要求可逆

你说的这个事情是不可能完成的,谢谢

简单的抽屉原理就能说明呀

如果 被转换的 字符串的长度为a,转换后的长度为b

那么由字符的范围c可知,a能表示的各种组合为 c的a次方,b能表示的各种组合为c的b次方

当 ab 的时候,将所有可能出现的字符串都进行转化,无论转换的方式为什么

那么必然有超过2个源字符串指向了同一个目标,那么目标还原的时候就不知道是哪一个了

所以说 MD5本身不是加密算法,是签名算法!!这个很重要!

希望你看懂了……

求一个用java编写的可逆的加密算法程序,自己写的小程序也行。

public class mySecurity {

private static KeyGenerator keygen ;

private static SecretKey secretKey;

private static Cipher cipher;

private static mySecurity security = null;

private mySecurity(){

}

public static mySecurity getInstance() throws Exception{

if(security == null){

security = new mySecurity();

keygen = KeyGenerator.getInstance("AES");

secretKey = keygen.generateKey();

cipher =Cipher.getInstance("AES");

}

return security;

}

//加密

public String encrypt(String str) throws Exception{

cipher.init(Cipher.ENCRYPT_MODE,secretKey);

byte [] src = str.getBytes(); byte [] enc = cipher.doFinal(src);

return parseByte2HexStr(enc); }

//解密

public String decrypt(String str) throws Exception{

cipher.init(Cipher.DECRYPT_MODE,secretKey);

byte[] enc = parseHexStr2Byte(str); byte [] dec = cipher.doFinal(enc);

return new String(dec); }

/**将16进制转换为二进制

* @param hexStr

* @return

*/

public static byte[] parseHexStr2Byte(String hexStr) {

if (hexStr.length() 1)

return null;

byte[] result = new byte[hexStr.length()/2];

for (int i = 0;i hexStr.length()/2; i++) {

int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);

int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);

result[i] = (byte) (high * 16 + low);

}

return result;

}

/**将二进制转换成16进制

* @param buf

* @return

*/

public static String parseByte2HexStr(byte buf[]) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i buf.length; i++) {

String hex = Integer.toHexString(buf[i] 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

sb.append(hex.toUpperCase());

}

return sb.toString();

}

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

String str = "abc haha 我";

String ss = mySecurity.getInstance().encrypt(str) ;

System.out.println(ss);

System.out.println(mySecurity.getInstance().decrypt(ss));

}

}

关于java可逆算法和java判断可逆素数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。