gpt4 book ai didi

java - 使用JavaScript替代Java进行签名加密(DESede/CBC/PKCS5Padding)

转载 作者:行者123 更新时间:2023-11-29 22:36:53 25 4
gpt4 key购买 nike

我正在开发一个项目,该项目使用 Java 服务来加密我从网络服务收到的签名。我需要用 JavaScript 替换这段代码。

这是我使用 JavaScript 的地方 http://jsfiddle.net/cDeyv/4/ (感谢 Rasmus Faber 的一些帮助,代码现在可以正常工作)

这是Java

import java.io.ByteArrayOutputStream;
import java.text.SimpleDateFormat;
import java.util.StringTokenizer;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;


// TODO: Auto-generated Javadoc

/**
* The Class SymmetricEncryption.
*/

public class SymmetricEncryption {

public static void main(String args[]) {

String signatureKey = "185-188-32-81-185-2-188-103-248-127-38-173-109-200-56-32-81-47-234-4-191-157-26-247";
String serverTime = "2011-01-12 18:48:43.000";
String encryptedSignatureKey = "240-230-243-218-251-103-145-3-156-109-41-25-127-185-149-150-36-96-176-154-83-24-20-89";

SymmetricEncryption sE = new SymmetricEncryption();
String result1 = sE.genericencrypt(serverTime, signatureKey);

System.out.println(result1);
}

/**
* The d format.
*/
public final SimpleDateFormat dFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

/**
* The ivbytes.
*/
public byte[] ivbytes = new byte[]{(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00};

/**
* The iv.
*/
public IvParameterSpec iv = new IvParameterSpec(ivbytes);

/**
* Genericencrypt.
*
* @param source the source
* @param keyString the key string
* @return the string
*/
public String genericencrypt(String source, String keyString) {
try {

// Generate key
SecretKey key = getKey(keyString);

// Create the cipher
Cipher desCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");

// Initialize the cipher for encryption
desCipher.init(Cipher.ENCRYPT_MODE, key, iv);

// Our cleartext as bytes
byte[] cleartext = source.getBytes();

System.out.println("Server Time ASCII " + new String(cleartext));

// Encrypt the cleartext
byte[] ciphertext = desCipher.doFinal(cleartext);

System.out.println("ciphertext ASCII " + new String(ciphertext));

// Return a String representation of the cipher text
return getString(ciphertext);

} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* Gets the key.
*
* @param keyString the key string
* @return the key
*/
private SecretKey getKey(String keyString) {
try {
byte[] bytes = getBytes(keyString);
return new SecretKeySpec(bytes, "DESede");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* Gets the string.
*
* @param bytes the bytes
* @return the string
*/
public String getString(byte[] bytes) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
byte b = bytes[i];
sb.append((int) (0x00FF & b));
if (i + 1 < bytes.length) {
sb.append("-");
}
}
return sb.toString();
}

/**
* Gets the bytes.
*
* @param str the str
* @return the bytes
*/
public byte[] getBytes(String str) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
StringTokenizer st = new StringTokenizer(str, "-", false);
while (st.hasMoreTokens()) {
int i = Integer.parseInt(st.nextToken());
bos.write((byte) i);
}
return bos.toByteArray();
}
}

这将返回“240-230-243-218-251-103-145-3-156-109-41-25-127-185-149-150-36-96-176-154-83-24 -20-89"

我需要找到 DESede/CBC/PKCS5Padding 加密算法的实现。

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

DESede 是 Triple DES 的 Java 名称.那应该可以帮助您搜索实现。这是一个:http://www.tero.co.uk/des/code.php

关于java - 使用JavaScript替代Java进行签名加密(DESede/CBC/PKCS5Padding),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4673158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com