我想将Base62 Byte数组转换为人类可读的Stiring
在此代码中,
我需要将“[B @ 913fe2”(结果)转换为“Hello Wold!”。
我查看了几个以前的问题,但我不知道如何。
package chapter9;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.*;
import java.util.Arrays;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.cms.CMSProcessable;
import org.bouncycastle.cms.CMSProcessableByteArray;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.CMSSignedDataGenerator;
/**
* Example of generating a detached signature.
*/
public class SignedDataExample
extends SignedDataProcessor
{
public static void main(String[] args)
throws Exception
{
KeyStore credentials = Utils.createCredentials();
PrivateKey key = (PrivateKey)credentials.getKey(Utils.END_ENTITY_ALIAS, Utils.KEY_PASSWD);
Certificate[] chain = credentials.getCertificateChain(Utils.END_ENTITY_ALIAS);
CertStore certsAndCRLs = CertStore.getInstance("Collection",
new CollectionCertStoreParameters(Arrays.asList(chain)), "BC");
X509Certificate cert = (X509Certificate)chain[0];
// set up the generator
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
gen.addSigner(key, cert, CMSSignedDataGenerator.DIGEST_SHA256);
gen.addCertificatesAndCRLs(certsAndCRLs);
// create the signed-data object
CMSProcessable data = new CMSProcessableByteArray("Hello World!".getBytes());
//CMSProcessable data = new CMSProcessableByteArray(data1.getBytes());
CMSSignedData signed = gen.generate(data, "BC");
// recreate
signed = new CMSSignedData(data, signed.getEncoded());
//signed.signedContent
//signed.g
CMSProcessable S = signed.getSignedContent();
byte[] K = Base64.decodeBase64((S.getContent()).toString());
//String K = Base64.decodeBase64(S.getContent());
//BASE64Decoder.decoder.decodeBuffer()
// verification step
X509Certificate rootCert = (X509Certificate)credentials.getCertificate(Utils.ROOT_ALIAS);
if (isValid(signed, rootCert))
{
System.out.println("verification succeeded");
System.out.println(K);
}
else
{
System.out.println("verification failed");
}
}
}
验证成功
我需要将“[B @ 913fe2”(结果)转换为“Hello Wold!”。
问候。
答案 0 :(得分:10)
在字节数组上调用toString()
只打印数组的类型([B
),然后是hashCode。您想使用new String(byteArray)
。
您还应该考虑使用显式字符集而不是默认字符集:
byte[] array = string.getBytes("UTF8");
String s = new String(array, "UTF8");
答案 1 :(得分:3)
你应该使用
byte[] k = Base64.decodeBase64((S.getContent()).toString());
String asString = new String(k);
答案 2 :(得分:-1)
您必须使用此代码
CMSSignedData signeddata = new CMSSignedData(signedBytes);
CMSProcessable cmsdata = signeddata.getSignedContent();
System.out.println(new String((byte[]) s.getContent()));
它对我有用。 我正在使用BouncyCastle并尝试从PKCS7签名数据中获取原始数据。